基于Python實現(xiàn)web網(wǎng)頁內(nèi)容爬取的方法
在日常學習和工作中,我們經(jīng)常會遇到需要爬取網(wǎng)頁內(nèi)容的需求,今天就如何基于Python實現(xiàn)web網(wǎng)頁內(nèi)容爬取進行講解。
1. 網(wǎng)頁分析
用Chrome瀏覽器打開網(wǎng)頁(https://car.yiche.com/)并進行分析。
F12鍵打開開發(fā)者視圖,如下所示:
在網(wǎng)頁頁面上想要查看的頁面內(nèi)容處,點擊 右鍵->檢查(inspect)
,開發(fā)者模式中會自動選中對應的HTML代碼。
分析發(fā)現(xiàn)車牌的名字在 name=“div”, attrs={“class”: “item-brand”}里面
2. 獲取網(wǎng)頁信息
在Python中,我們可以使用 urllib.request
和 requests
這兩個庫來發(fā)送HTTP請求。這兩個庫都是用來處理URLs的,但是有一些區(qū)別。
2.1 使用默認的urllib.request庫
urllib.request
是Python標準庫中的一個模塊,用于處理URLs的打開,讀取和下載。它提供了一個簡單的接口來發(fā)送HTTP請求,并可以處理響應數(shù)據(jù)。
import urllib.request from bs4 import BeautifulSoup url = "https://car.yiche.com/" page = urllib.request.urlopen(url) soup = BeautifulSoup(page, "html.parser") result_list = [] # 篩選數(shù)據(jù) tag_list = soup.find_all(name="div", attrs={"class": "item-brand"}) for tag in tag_list: result_list.append(tag.attrs["data-name"]) print(result_list)
2.2 使用requests庫
requests
是一個第三方庫,它提供了更簡潔的API來發(fā)送HTTP請求,并處理響應數(shù)據(jù)。使用requests庫可以更方便地發(fā)送各種類型的請求,如GET,POST等,并可以設置請求頭,傳遞參數(shù)等。
首先在環(huán)境中安裝 requests 庫,命令如下:
pip install requests
from bs4 import BeautifulSoup import requests url = "https://car.yiche.com/" req = requests.get(url=url) soup = BeautifulSoup(req.content, "html.parser") result_list = [] # 篩選數(shù)據(jù) tag_list = soup.find_all(name="div", attrs={"class": "item-brand"}) for tag in tag_list: result_list.append(tag.attrs["data-name"]) print(result_list)
輸出如下:
['奧迪', '埃安', 'AITO', '阿維塔', '阿斯頓·馬丁', '阿爾法·羅密歐', 'AUDI', '阿莫迪羅', 'AUXUN傲旋', '愛馳', 'Apollo', 'ALPINA', 'Abarth', 'ABT', '阿爾特', '安凱客車', 'Aurus', 'Arash', '安徽獵豹', 'ATOM', '艾康尼克', 'ASKA', 'Alef', 'APEX', 'Agile Automotive', 'ATS', 'AKXY2', 'Alpine', 'Aspark', 'Aviar', 'AURA', 'AIM', 'Ariel', 'Aria', 'Atlis', 'Alpha Motor', 'AFEELA', 'AEHRA', 'AC Schnitzer', 'Adria', 'AZNOM', 'AEV ROBOTICS', '比亞迪', '奔馳', '本田', '寶馬', '別克', '保時捷', '北京', '奔騰', '標致', '寶駿', '賓利', 'BAW北汽制造', '北京汽車', '布加迪', '博速', '巴菲特', '霸王龍', '奔馳卡車',.......]
2.3 urllib.request 和 requests庫區(qū)別
urllib.request
和 requests
這兩個庫的主要區(qū)別如下:
- urllib.request是Python的標準庫,而requests是第三方庫,需要額外安裝。
- urllib.request是比較底層的庫,需要手動處理請求和響應,而requests提供了更高級的API,簡化了請求和響應的處理。
- requests庫更加簡潔和易于使用,并提供了更多的功能,如自動處理重定向,會話管理等。
參考資料:python urllib.request和request的區(qū)別
3. 更改用戶代理
在使用Python進行網(wǎng)頁爬取時,許多網(wǎng)站會通過檢查HTTP請求頭中的User-Agent字段來識別發(fā)出請求的客戶端類型。設置用戶代理(User-Agent)是為了模仿真實瀏覽器的請求,避免被網(wǎng)站識別為自動化工具而遭封鎖,同時確保獲取完整的網(wǎng)頁內(nèi)容,并遵守網(wǎng)站的訪問規(guī)則。
agent = {'User-Agent': 'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit / 531.21.10(KHTML, likeGecko) Mobile / 7B405'} req = requests.get(url=url, headers=agent)
4. BeautifulSoup庫篩選數(shù)據(jù)
BeautifulSoup庫是一種HTML解析庫,可以將HTML文檔解析成Python對象,使得開發(fā)者可以方便地從HTML文檔中提取數(shù)據(jù)。
首先需要安裝 BeautifulSoup
庫。
pip install BeautifulSoup4
4.1 soup.find()和soup.find_all() 函數(shù)
soup.find()和soup.find_all() 函數(shù)可以用來查找網(wǎng)頁中特定的元素,區(qū)別在于:
- soup.find()查找到一次即停止
- soup.find_all() 可以查找到所有記錄
soup.find()和soup.find_all() 函數(shù)的使用方式可參考:Python中bs4的soup.find()和soup.find_all()用法
參考資料
到此這篇關于基于Python實現(xiàn)web網(wǎng)頁內(nèi)容爬取的文章就介紹到這了,更多相關Python web網(wǎng)頁內(nèi)容爬取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python使用Plotly繪制常見5種動態(tài)交互式圖表
Plotly是一個非常強大的開源數(shù)據(jù)可視化框架,它通過構(gòu)建基于 HTML 的交互式圖表來顯示信息,可創(chuàng)建各種形式的精美圖表。本文將用Plotly庫繪制常見的五種動態(tài)交互式圖表,感興趣的可以學習一下2022-03-03Python創(chuàng)建普通菜單示例【基于win32ui模塊】
這篇文章主要介紹了Python創(chuàng)建普通菜單,結(jié)合實例形式分析了Python基于win32ui模塊創(chuàng)建普通菜單及添加菜單項的相關操作技巧,并附帶說明了win32ui模塊的安裝命令,需要的朋友可以參考下2018-05-05Python入門案例之找出文件中出現(xiàn)次數(shù)最多的10個單詞
這篇文章主要為大家?guī)硪粋€簡單的Python入門案例——找出文件中出現(xiàn)次數(shù)最多的10個單詞,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-02-02