当前位置: 首页 > article >正文

爬取元气手机壁纸简单案例(仅用于教学,禁止任何非法获利)

爬虫常用的库

爬虫(Web Scraping)是一种从网页上提取数据的技术。在 Python 中,有许多库可以帮助实现这一目标。以下是一些常用的爬虫库,以及对 BeautifulSoup 的详细介绍。
常用爬虫库

1.Requests

​ a.功能:用于发送 HTTP 请求,获取网页内容。
​ b.特点:简单易用,支持 GET 和 POST 请求,能够处理 cookies、会话等。

2.BeautifulSoup

​ a.功能:用于解析 HTML 和 XML 文档,提取数据。
​ b.特点:提供简单的 API 来导航、搜索和修改解析树,非常适合处理复杂的网页结构。

3.Scrapy

​ a.功能:一个强大的爬虫框架,适合构建大规模爬虫项目。
​ b.特点:支持异步请求,内置了数据存储和提取功能,适合需要高效爬取的场景。

4.Selenium

​ a.功能:用于自动化浏览器操作,可以抓取动态内容。
​ b.特点:可以模拟用户操作,适合处理 JavaScript 渲染的页面。

5.lxml

​ a.功能:用于解析和处理 XML 和 HTML 文档。
​ b.特点:速度快,支持 XPath 查询。

6.Pandas

​ a.功能:用于数据处理和分析。
​ b.特点:可以方便地将抓取到的数据进行清洗和分析。

BeautifulSoup 详细介绍

BeautifulSoup 是一个用于解析 HTML 和 XML 的 Python 库,提供了方便的工具来提取和处理网页数据。以下是对 BeautifulSoup 的一些关键点的介绍:
安装
使用 pip 安装 BeautifulSoup:

pip install beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple 

安装 requests

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple 

基本用法

  • 导入库:
   from bs4 import BeautifulSoup
   import requests
  • 获取网页内容:
   url = 'https://example.com'
   response = requests.get(url)
   html_content = response.text
  • 创建 BeautifulSoup 对象:
   soup = BeautifulSoup(html_content, 'html.parser')

解析 HTML:

  • 查找标签:
title = soup.title
print(title.text)  # 打印网页标题
  • 查找特定标签:
 for heading in headings:
     print(heading.text)
     headings = soup.find_all('h1')  # 找到所有 h1 标签
  • 使用 CSS 选择器:
 links = soup.select('a[href]')  # 查找所有有 href 属性的链接
 for link in links:
     print(link['href'])

修改文档:

  • 添加、删除标签:
new_tag = soup.new_tag('p')
new_tag.string = '这是新添加的段落'
soup.body.append(new_tag)  # 将新标签添加到 body 中

BeautifulSoup优点

  • 易于使用:简单的 API 使得即使是初学者也能快速上手。
  • 灵活性:支持多种解析器(如 lxml 和 html.parser)。
  • 强大的搜索功能:通过标签名、属性和文本内容进行精确查找。

示例代码
以下是一个简单的示例,演示如何使用 BeautifulSoup 提取网页中的所有链接:

import requests
from bs4 import BeautifulSoup

# 获取网页内容
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# 查找所有链接
for link in soup.find_all('a'):
    print(link.get('href'))

总结
BeautifulSoup 是一个功能强大的网页解析库,适合用于快速提取 HTML 数据。结合其他库(如 Requests 和 Scrapy),可以构建强大的爬虫应用。通过灵活使用其各种功能,用户可以高效地抓取和处理网页数据。

简单案例演示爬取元气手机壁纸

获取网页请求信息

  • 设置headers请求头过程如下图:

在这里插入图片描述

  • 查看请求响应的网页html代码
import  requests
# 定制请求头
headers = {'user-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'}
response = requests.get('https://mbizhi.cheetahfun.com/sj/j/', headers=headers)
print('text:')
print(response.text)
print("content:")
print(response.content)

  • 出现下面的结果表示请求成功

在这里插入图片描述

完整代码如下:

import requests
from bs4 import BeautifulSoup
import os
# 定制请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'
}

# 发送请求获取网页内容
url = 'https://mbizhi.cheetahfun.com/sj/j/'
response = requests.get(url, headers=headers)

# 检查响应状态码
if response.status_code == 200:
    # 使用 BeautifulSoup 解析网页内容
    soup = BeautifulSoup(response.text, 'html.parser')

    # 查找所有图片元素
    images = soup.find_all('img')

    # 创建保存图片的目录
    save_dir = 'downloaded_images'
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)

    # 遍历图片元素,下载并保存图片
    for i, image in enumerate(images):
        img_url = image['src']

        # 确保URL是绝对路径
        if not img_url.startswith(('http:', 'https:')):
            img_url = url + img_url  # 将相对路径转换为绝对路径

        img_data = requests.get(img_url).content  # 下载图片内容

        # 构建保存路径
        file_path = os.path.join(save_dir, f'image_{i}.jpg')

        # 保存图片
        with open(file_path, 'wb') as file:
            file.write(img_data)
        print(f'Image {i} saved to {file_path}')
else:
    print('Failed to retrieve the webpage')

运行后:打开downloaded_images文件夹查看,获取的图片如下:

在这里插入图片描述


http://www.kler.cn/news/329741.html

相关文章:

  • Activiti7 工作流引擎学习
  • 【文心智能体 | AI大师工坊】如何使用智能体插件,完成一款旅游类智能体的开发,来体验一下我的智能体『​​​​​​​厦门CityWalk』
  • ②无需编程 独立通道 Modbus主站EtherNet/IP转ModbusRTU/ASCII工业EIP网关串口服务器
  • WebRTC Connection Negotiate解决
  • 遥感图像语义分割数据集制作(使用ArcGIS Pro)
  • C++中substr用法记录
  • 开源链动2+1模式、AI智能名片与S2B2C商城小程序在精准选品与定位决策中的应用
  • 大数据毕业设计选题推荐-广东旅游数据分析系统-Hive-Hadoop-Spark
  • 问:JAVA中阻塞队列的概念、原理及使用场景?
  • springboot基于Vue的电影在线预定与管理系统
  • C0012.Clion改用VS编译器开发Qt界面
  • TCP的第三次握手没有回复,会出现哪些问题现象
  • Python | Leetcode Python题解之第448题找到所有数组中消失的数字
  • Go语言接口的基本概念
  • Qt-QTableWidget多元素控件(37)
  • element-ui 通过按钮式触发日期选择器
  • 【流计算】流计算概论
  • 如何安装和设置 Go 版本的 fabric AI 工作流框架?
  • MySQL基础篇 - 多表查询
  • Jmeter生成JWT token
  • 海外媒体投稿:如何运用3种国内外媒体套餐发稿突出重围?
  • 注册安全分析报告:人民卫生音像
  • profile-spec-ref元素
  • 【JavaEE】——线程池大总结
  • 代码随想录算法训练营DAY10之动态规划(二)背包问题
  • 什么是 Supply chain attack(供应链攻击)
  • 大数据毕业设计选题推荐-民族服饰数据分析系统-Python数据可视化-Hive-Hadoop-Spark
  • 针对考研的C语言学习(定制化快速掌握重点3)
  • 如何批量转换大模型训练数据集格式
  • 使用容器启动的zk无法暴露3888问题解决