参考文档:https://blog.csdn.net/qq_38628970/article/details/131556113
网络爬虫是一种自动化程序,通过模拟人类浏览器的行为,自动访问网页并提取数据。Python提供了许多库和工具,使得编写网络爬虫变得相对简单。其中,常用的库包括requests、BeautifulSoup和Scrapy等。
一、安装所需库
首先,确保安装了所需的库:
pip install requests #用于发送HTTP请求
pip install beautifulsoup4 #用于解析HTML和XML文档
pip install lxml #安装解析器,用于解析HTML和XML文件
pip install pandas #用于数据清洗、处理、分析和可视化
pip install openpyxl #用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件
pip install requests beautifulsoup4 lxml pandas openpyxl #也可以用一句命令一起安装
二、使用Python进行数据抓取的步骤
要使用Python爬取网页元素并将其保存到Excel文档,以下是一个示例流程:
- 使用requests获取网页内容。
- 使用BeautifulSoup解析HTML(推荐使用lxml),提取所需的数据。
- 使用pandas创建DataFrame并保存到Excel文件。
Pandas DataFrame主要用于数据操作和分析,它可以通过 to_excel 方法将 DataFrame 保存到 Excel 文件中,但这个过程中并不支持插入图片。
附录:完整代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 定义目标网页URL
TARGET_URL = "http://www.qichedaquan.com/index.php/auto"
# 发送HTTP GET请求
response = requests.get(TARGET_URL)
# 检查HTTP请求是否成功
if response.status_code == 200:
# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(response.content, "lxml")
# 定义存储数据的列表
link_data = []
img_data = []
text_data = []
# 选择网页中所有需要解析的元素
tag_list = soup.select('.col-3 a')
# 遍历每个元素,提取所需信息
for tag in tag_list:
# 提取链接地址
link_tag = tag.get('href')
link_data.append(link_tag)
# 提取图片地址
img_tag = tag.find('img').get('src') if tag.find('img') else "null"
img_data.append(img_tag)
# 提取文本信息,并对不存在的<p>标签做容错处理
text_tag = tag.find('p')
text_data.append(text_tag.get_text().strip() if text_tag else "null")
# 组装数据为字典格式
data = {
'汽车名称': text_data,
'链接地址': link_data,
'汽车图片': img_data
}
# 创建DataFrame
df = pd.DataFrame(data)
# 将DataFrame保存到Excel文件,使用'openpyxl'引擎
df.to_excel('汽车大全.xlsx', index=False, engine='openpyxl')
print('数据已保存到Excel文件。')
else:
# 打印请求失败的状态码
print(f'请求失败,状态码:{response.status_code}')
三、代码解析
1、发起HTTP请求
使用requests库可以发起HTTP请求,并获取网页的内容。以下是一个简单的示例:
import requests
# 定义目标网页URL
TARGET_URL = "http://www.qichedaquan.com/index.php/auto"
# 发送HTTP GET请求
response = requests.get(TARGET_URL)
2、使用BeautifulSoup解析文档
2.1 解析文档
你需要一个解析器来解析HTML或XML文档。BeautifulSoup支持多种解析器,如Python内置的html.parser,还有更快的lxml和html5lib。
from bs4 import BeautifulSoup
# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(response.content, "lxml")
#soup = BeautifulSoup(response.content, "html.parser")
print(soup)
运行结果,假设我们要获取红框内的数据:
BeautifulSoup解析文件结果
2.2 查找元素
你可以使用多种方法来查找元素,比如find(), find_all()等。也可以使用CSS选择器的.select(),.select_one()方法,参考另一篇笔记《BeautifulSoup CSS选择器九种用法》。
# 选择网页中所有需要解析的元素
tag_list = soup.select('.col-3 a')
print(tag_list)
运行结果
获取所需元素
2.3 提取数据
# 定义存储数据的列表
link_data = []
img_data = []
text_data = []
# 遍历每个元素,提取所需信息
for tag in tag_list:
# 提取链接地址
link_tag = tag.get('href')
link_data.append(link_tag)
print(link_tag)
# 提取图片地址
img_tag = tag.find('img').get('src') if tag.find('img') else "Null"
img_data.append(img_tag)
print(img_tag)
# 提取文本信息,并对不存在的<p>标签做容错处理
text_tag = tag.find('p')
text_data.append(text_tag.get_text().strip() if text_tag else "Null")
print(text_tag.get_text().strip()) if text_tag else print("Null")
运行结果
提取所需数据
3、使用pandas
3.1 数据处理
一旦我们获取到数据,就可以进行进一步的处理和存储。根据需求,我们可以将数据保存为CSV、JSON或数据库等格式。
# 组装数据为字典格式
data = {
'汽车名称': text_data,
'链接地址': link_data,
'汽车图片': img_data
}
运行结果
组装数据为json字典格式
3.2、数据储存
import pandas as pd
# 创建DataFrame
df = pd.DataFrame(data)
# 将DataFrame保存到Excel文件,使用'openpyxl'引擎
df.to_excel('汽车大全.xlsx', index=False, engine='openpyxl')
运行结果
导出结果到Excel文档