簡介:本文將詳細演示如何用Python爬取糗事百科的笑話段子內容,還會講到爬蟲的時候需要重點關注的點,Web抓取是從Internet提取資料的程序,這也稱為網路收集或網路資料提取,Python使我們能夠使用自動化技術執行Web抓取,BeautifulSoup是一個Python庫,用于決議HTML和XML檔案中的資料(結構化資料), |
目錄
- 什么是網頁抓取?
- 為什么我們要從互聯網上抓取資料?
- 網站采集合法嗎?
- HTTP請求/回應模型
- 創建網路爬蟲
- 步驟1:瀏覽并檢查網站/網頁
- 步驟2:創建用戶代理
- 步驟3:匯入請求庫
- 檢查狀態碼
- 步驟4:使用 BeautifulSoup 庫決議HTML
- 步驟5:使用for回圈請求多個頁面
- 步驟6:使用 select() 方法,快速找到標簽元素
- 步驟7:資料清洗,洗掉字串“None”
- 最終的解決方案
- 輸出:
- 最后
互聯網有海量資料,無論你是資料科學家,商人,學生還是專業人士,所有人都會從互聯網上獲取資料,
網頁抓取是什么意思?這是從網站提取資料的簡單動作,甚至從Internet復制和粘貼資料都是Web抓取,因此,如果你從互聯網上下載了喜歡的歌曲,則意味著您已經從互聯網上抓取了資料,
在本文中,我們將探討一些與Web抓取有關的最常見問題,然后我們將介紹創建Web抓取工具的整個程序,并使Web抓取任務自動化!
什么是網頁抓取?
Web抓取是從Internet提取資料的程序,這也稱為網路收集或網路資料提取,Python使我們能夠使用自動化技術執行Web抓取,
Python中用于網路抓取的一些最常用的庫是:
- requests
- BeautifulSoup4
- Selenium
- Scrapy.
為什么我們要從互聯網上抓取資料?
如果按照適當的指導方針進行Web抓取,并且可以通過自動化,實作我們在Internet上重復執行的日常任務,會使我們的生活變得輕松,
- 如果你是資料分析師,并且需要每天從Internet提取資料,那么創建一個自動Web爬蟲是減輕你每天手動提取資料負擔的解決方案,
- 你可以使用網路抓取工具從在線購物網站提取有關產品的資訊,并比較產品價格和規格,
- 你可以將網頁抓取用于內容營銷和社交媒體促銷,
- 作為學生或研究人員,你可以使用網路抓取從網路中提取研究/專案的資料,
最重要的是,“自動采集可以讓您聰明地作業!”
網站采集合法嗎?
這是一個非常重要的問題,但是,對此沒有具體答案,有些網站不介意你從其網頁上抓取內容,而另一些網站則禁止抓取內容,因此,有必要遵循準則,并且在從其網頁上抓取內容時不要違反網站的政策,
讓我們看看在通過Internet抓取內容時必須牢記的一些重要準則,


在深入研究網路抓取之前,了解網路的作業原理以及什么是超文本標記語言非常重要,因為這就是我們要從中提取資料的方式,因此,讓我們簡要討論一下HTTP請求回應模型和HTML,
HTTP請求/回應模型
網路作業原理的整個作業原理可能非常復雜,但讓我們嘗試并從簡單的角度理解事物,這將使我們對如何進行網路抓取有所了解,
簡而言之,HTTP請求/回應是HTTP和其他基于HTTP的擴展協議使用的通信模型,根據該模型,客戶端(Web瀏覽器)向服務器發送對資源或服務的請求,然后服務器發送如果成功處理了請求,則回傳與資源相對應的回應;否則,如果服務器無法處理該請求,則服務器將以錯誤訊息進行回應,

與Web服務器進行互動的HTTP方法很多,但最常用的是 get 和 post
- GET:用于從Web服務器中的特定資源請求資料,
- POST:用于將資料發送到服務器以創建/更新資源,
其他HTTP方法是:
- PUT
- HEAD
- DELETE
- PATCH
- OPTIONS
注意:為了從網站上獲取資料,我們將使用 requests 庫和 get() 方法向Web服務器發送一個請求,
雖然HTML本身超出了本文的討論范圍,但是你必須了解HTML的基本結構,不要擔心,你不需要學習如何使用HTML和CSS設計網頁,但你必須了解使用HTML創建網頁時使用的一些關鍵元素和標記,
HTML有一個層次結構 / 樹形結構,這個屬性使我們在訪問HTML檔案中的元素時,可以根據它們的父子關系來訪問網頁,為了可視化HTML樹狀結構,讓我們看看下面給出的圖片,

如果你想進一步探索和了解HTML的作業原理,我列出了幾個鏈接:
- html.com
- W3Schools的HTML教程
創建網路爬蟲
在本次演練中,我們將抓取:
- 笑話段子內容
網站:https://www.qiushibaike.com/text/

步驟1:瀏覽并檢查網站/網頁
要使用開發者工具導航:
- 右鍵單擊該網頁,
- 選擇檢查,

下面給出的影像表示我們在抓取時需要處理的部分,

步驟2:創建用戶代理
用戶代理是客戶端(通常是Web瀏覽器),用于代表用戶向Web服務器發送請求,當從同一臺機器/系統一次又一次地獲取自動化請求時,Web服務器可能會猜測該請求是自動化發送的,它會阻止了該請求,因此,我們可以使用用戶代理來偽造瀏覽器,訪問特定網頁,從而使服務器認為請求來自原始用戶,而不是機器人,
語法:
# 創建 User-Agent (可選)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}
# 將User-Agent作為引數與get()請求一起傳遞
response = requests.get("https://www.qiushibaike.com/text/page/1/", headers=headers)
步驟3:匯入請求庫
Requests 請求庫允許我們發送 get 請求到Web服務器,
運作方式如下:
- import requests 該庫以一種易于處理的格式,處理從服務器請求網站的細節,
- 使用 requests.get(…) 方法訪問網站,并將URL 作為引數傳遞, 以便函式知道要訪問的位置,
- 訪問get請求的實際主體(回傳值是一個請求物件,它還包含一些有用的元資訊,如檔案型別等),并使用 .text 屬性將其存盤在一個變數中,
語法:
# 存盤網頁內容
webpage = response.text
檢查狀態碼
服務器處理完HTTP請求后,它將發送包含狀態碼的回應,狀態代碼指示特定回應是否已成功處理,
主要有5種不同的狀態代碼類別:

語法:
print(response.status_code)
200
步驟4:使用 BeautifulSoup 庫決議HTML
BeautifulSoup是一個Python庫,用于決議HTML和XML檔案中的資料(結構化資料),
- 匯入BeautifulSoup庫,
- 創建BeautifulSoup物件,第一個引數表示HTML資料,而第二個引數是決議器,
語法:
# 從bs4匯入BeautifulSoup
from bs4 import BeautifulSoup
# 從網頁內容中創建一個BeautifulSoup物件
soup = BeautifulSoup(webpage, "lxml")
創建BeautifulSoup物件后,我們需要使用BeautifulSoup 庫提供給我們的不同選項來導航和查找HTML檔案中的元素,并從中抓取資料,
步驟5:使用for回圈請求多個頁面
語法:
# 指定10個頁面,回圈賦值
for page in range(10):
response = requests.get('https://www.qiushibaike.com/text/page/{}/'.format(page), headers=headers)
步驟6:使用 select() 方法,快速找到標簽元素
soup.select('a.contentHerf .content span')
步驟7:資料清洗,洗掉字串“None”
語法:
if joke.string is not None:
print(joke.string)
最終的解決方案
現在,我們合并所有步驟,以達到最終的解決方案/代碼,如下所示:
import requests
from bs4 import BeautifulSoup
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}
for page in range(10):
response = requests.get('https://www.qiushibaike.com/text/page/{}/'.format(page), headers=headers)
webpage = response.text
soup = BeautifulSoup(webpage, "lxml")
for joke in soup.select('a.contentHerf .content span'):
if joke.string is not None:
print(joke.string)
輸出:

最后
希望閱讀完整篇文章后,你可以輕松地從網頁中抓取資料!
請訂閱并繼續關注,以后會收到更多有趣的文章,
本文為“一個火星程式員”原創文章,轉載請標明出處
原文鏈接:https://blog.csdn.net/machial/article/details/110676426
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232577.html
標籤:python
