前言:
之前小編寫了一篇關于爬蟲為什么爬取不到數據文章(文章鏈接為:),但是當時小編也是胡亂編寫的,其實里面有很多問題的,現在小編重新發布一篇關于爬蟲爬取不到數據文章,希望各位讀者更加了解爬蟲。
1. 最基礎的爬蟲
通常編寫爬蟲代碼,使用如下三行代碼就可以實現一個網頁的基本訪問了。
python">from urllib import request
rsp = request.urlopen(url='某某網站')
print(rsp.read().decode('編碼'))

或者
import requests
rsp = requests.get(url='某某網站')
print(rsp.text)
但是,有的網站你使用上述方式訪問時,有可能出現一下情況:
直接報錯;沒有報錯,但是給出相應的響應碼,如403;沒有報錯,但是輸出信息沒有在瀏覽器上看到的那么多(這有可能是網頁使用了動態加載的原因)。 2. 添加請求頭的爬蟲
上述講到的三種情況,怎樣解決呢?基本方式是添加一個請求頭(請求頭的字段通常只需添加user-agent字段即可用python爬取網站數據,用來模擬瀏覽器訪問;然而有的網站用爬蟲來訪問時,可能還要添加其他字段,最好是把這個網頁所有請求頭字段信息全部添加上;有的網頁全部請求頭字段信息全部添加上,然而也訪問不到數據,這種情況小編也沒有什么好的解決辦法,不知道使用模塊直接操控瀏覽器是否可以,沒有試過)。
如用模塊來訪問網站時會報錯,如下:
但是添加請求頭之后,就可以正常訪問了。
參考代碼如下:
from urllib import request

url = 'https://www.bilibili.com/'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4507.400'
}
req = request.Request(url=url,headers=headers)

rsp = request.urlopen(req)
print(rsp.read().decode('utf-8'))
如用模塊來訪問百度網站時會出現如下情況:
很顯然,這個網頁不可能就這么點代碼標簽,添加一個請求頭之后,如下:
3. 動態網頁加載的數據
提到動態網頁,讀者首先可以去看看小編的這篇文章:爬蟲:什么是靜態網頁(數據),什么是動態網頁(數據),小編學習過后端知識,大體知道為什么用上述方式訪問不到相應的數據。why(大概是這樣吧!也有可能講的不對,希望讀者指正[如果有錯誤的話],一般而言,我們用爬蟲爬取得到的數據是當前網頁已經完全加載的,然而動態網頁使用了ajax技術,而執行者一段ajax代碼好像是網頁完全加載之后才執行的,因此你用爬蟲爬取不到那部分數據。)
此時,你有兩種解決方式:
找到這個ajax的相關網頁鏈接,訪問這個鏈接,從而得到相關數據;直接使用這個模塊,操作瀏覽器訪問。
如果讀者使用第1種解決方式,有可能你訪問的那個鏈接一些參數是加密的,這時你需要利用js斷點(使用谷歌瀏覽器),找到那段加密參數加密之前的數據信息和相關的一些js加密函數,找到加密之前的數據信息的組合規則。關于js加密函數,如果簡單的話,直接用模擬出加密效果即可;如果復雜的話,最好使用或者其他模塊下的一些方法去執行這些js加密函數。
上述關于使用第1種解決方式,小編過去做過的有爬蟲爬取酷狗音樂、網易云音樂、斗魚視頻等。有興趣的讀者可以去看看小編的爬蟲專欄,鏈接為:,當然,有一些文章發表在博客園,博客主頁為:
4. 總結
有的讀者也許會問用python爬取網站數據,如果我ip封掉了,怎樣爬取網頁數據,其實,使用相關ip代理即可,讀者可以去看看小編的爬蟲專欄,里面有講ip代理的相關文章。另外,還有一些高大上的反爬措施,小編并不是很了解,就不在這一一贅述了,如果未來小編真的了解到了,到時候再在本文章后加上吧!