參考文檔:https://blog.csdn.net/qq_38628970/article/details/131556113
網(wǎng)絡(luò)爬蟲(chóng)是一種自動(dòng)化程序,通過(guò)模擬人類瀏覽器的行為,自動(dòng)訪問(wèn)網(wǎng)頁(yè)并提取數(shù)據(jù)。Python提供了許多庫(kù)和工具,使得編寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)變得相對(duì)簡(jiǎn)單。其中,常用的庫(kù)包括requests、BeautifulSoup和Scrapy等。
一、安裝所需庫(kù)
首先,確保安裝了所需的庫(kù):
pip install requests #用于發(fā)送HTTP請(qǐng)求
pip install beautifulsoup4 #用于解析HTML和XML文檔
pip install lxml #安裝解析器,用于解析HTML和XML文件
pip install pandas #用于數(shù)據(jù)清洗、處理、分析和可視化
pip install openpyxl #用于讀寫(xiě) Excel 2010 xlsx/xlsm/xltx/xltm 文件
pip install requests beautifulsoup4 lxml pandas openpyxl #也可以用一句命令一起安裝
二、使用Python進(jìn)行數(shù)據(jù)抓取的步驟
要使用Python爬取網(wǎng)頁(yè)元素并將其保存到Excel文檔,以下是一個(gè)示例流程:
- 使用requests獲取網(wǎng)頁(yè)內(nèi)容。
- 使用BeautifulSoup解析HTML(推薦使用lxml),提取所需的數(shù)據(jù)。
- 使用pandas創(chuàng)建DataFrame并保存到Excel文件。
Pandas DataFrame主要用于數(shù)據(jù)操作和分析,它可以通過(guò) to_excel 方法將 DataFrame 保存到 Excel 文件中,但這個(gè)過(guò)程中并不支持插入圖片。
附錄:完整代碼:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 定義目標(biāo)網(wǎng)頁(yè)URL
TARGET_URL = "http://www.qichedaquan.com/index.php/auto"
# 發(fā)送HTTP GET請(qǐng)求
response = requests.get(TARGET_URL)
# 檢查HTTP請(qǐng)求是否成功
if response.status_code == 200:
# 使用BeautifulSoup解析網(wǎng)頁(yè)內(nèi)容
soup = BeautifulSoup(response.content, "lxml")
# 定義存儲(chǔ)數(shù)據(jù)的列表
link_data = []
img_data = []
text_data = []
# 選擇網(wǎng)頁(yè)中所有需要解析的元素
tag_list = soup.select('.col-3 a')
# 遍歷每個(gè)元素,提取所需信息
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)
# 提取文本信息,并對(duì)不存在的<p>標(biāo)簽做容錯(cuò)處理
text_tag = tag.find('p')
text_data.append(text_tag.get_text().strip() if text_tag else "null")
# 組裝數(shù)據(jù)為字典格式
data = {
'汽車名稱': text_data,
'鏈接地址': link_data,
'汽車圖片': img_data
}
# 創(chuàng)建DataFrame
df = pd.DataFrame(data)
# 將DataFrame保存到Excel文件,使用'openpyxl'引擎
df.to_excel('汽車大全.xlsx', index=False, engine='openpyxl')
print('數(shù)據(jù)已保存到Excel文件。')
else:
# 打印請(qǐng)求失敗的狀態(tài)碼
print(f'請(qǐng)求失敗,狀態(tài)碼:{response.status_code}')
三、代碼解析
1、發(fā)起HTTP請(qǐng)求
使用requests庫(kù)可以發(fā)起HTTP請(qǐng)求,并獲取網(wǎng)頁(yè)的內(nèi)容。以下是一個(gè)簡(jiǎn)單的示例:
import requests
# 定義目標(biāo)網(wǎng)頁(yè)URL
TARGET_URL = "http://www.qichedaquan.com/index.php/auto"
# 發(fā)送HTTP GET請(qǐng)求
response = requests.get(TARGET_URL)
2、使用BeautifulSoup解析文檔
2.1 解析文檔
你需要一個(gè)解析器來(lái)解析HTML或XML文檔。BeautifulSoup支持多種解析器,如Python內(nèi)置的html.parser,還有更快的lxml和html5lib。
from bs4 import BeautifulSoup
# 使用BeautifulSoup解析網(wǎng)頁(yè)內(nèi)容
soup = BeautifulSoup(response.content, "lxml")
#soup = BeautifulSoup(response.content, "html.parser")
print(soup)
運(yùn)行結(jié)果,假設(shè)我們要獲取紅框內(nèi)的數(shù)據(jù):

2.2 查找元素
你可以使用多種方法來(lái)查找元素,比如find(), find_all()等。也可以使用CSS選擇器的.select(),.select_one()方法,參考另一篇筆記《BeautifulSoup CSS選擇器九種用法》。
# 選擇網(wǎng)頁(yè)中所有需要解析的元素
tag_list = soup.select('.col-3 a')
print(tag_list)
運(yùn)行結(jié)果

2.3 提取數(shù)據(jù)
# 定義存儲(chǔ)數(shù)據(jù)的列表
link_data = []
img_data = []
text_data = []
# 遍歷每個(gè)元素,提取所需信息
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)
# 提取文本信息,并對(duì)不存在的<p>標(biāo)簽做容錯(cuò)處理
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")
運(yùn)行結(jié)果

3、使用pandas
3.1 數(shù)據(jù)處理
一旦我們獲取到數(shù)據(jù),就可以進(jìn)行進(jìn)一步的處理和存儲(chǔ)。根據(jù)需求,我們可以將數(shù)據(jù)保存為CSV、JSON或數(shù)據(jù)庫(kù)等格式。
# 組裝數(shù)據(jù)為字典格式
data = {
'汽車名稱': text_data,
'鏈接地址': link_data,
'汽車圖片': img_data
}
運(yùn)行結(jié)果

3.2、數(shù)據(jù)儲(chǔ)存
import pandas as pd
# 創(chuàng)建DataFrame
df = pd.DataFrame(data)
# 將DataFrame保存到Excel文件,使用'openpyxl'引擎
df.to_excel('汽車大全.xlsx', index=False, engine='openpyxl')
運(yùn)行結(jié)果
