【Python爬蟲(chóng)】網(wǎng)絡(luò)數(shù)據(jù)抓取返回的數(shù)據(jù)類型

參考文檔: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è)示例流程:

  1. 使用requests獲取網(wǎng)頁(yè)內(nèi)容。
  2. 使用BeautifulSoup解析HTML(推薦使用lxml),提取所需的數(shù)據(jù)。
  3. 使用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ù):

BeautifulSoup解析文件結(jié)果

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é)果

提取所需數(shù)據(jù)

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é)果

組裝數(shù)據(jù)為json字典格式

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é)果

導(dǎo)出結(jié)果到Excel文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容