前言:
之前小編寫了一篇關(guān)于爬蟲為什么爬取不到數(shù)據(jù)文章(文章鏈接為:https://liuze.blog.csdn.net/article/details/105965562),但是當(dāng)時小編也是胡亂編寫的,其實里面有很多問題的,現(xiàn)在小編重新發(fā)布一篇關(guān)于爬蟲爬取不到數(shù)據(jù)文章,希望各位讀者更加了解爬蟲。
1. 最基礎(chǔ)的爬蟲
通常編寫爬蟲代碼,使用如下三行代碼就可以實現(xiàn)一個網(wǎng)頁的基本訪問了。
from urllib import request
rsp = request.urlopen(url='某某網(wǎng)站')
print(rsp.read().decode('編碼'))
或者
import requests
rsp = requests.get(url='某某網(wǎng)站')
print(rsp.text)
但是,有的網(wǎng)站你使用上述方式訪問時,有可能出現(xiàn)一下情況:
- 直接報錯;
- 沒有報錯,但是給出相應(yīng)的響應(yīng)碼,如403;
- 沒有報錯,但是輸出信息沒有在瀏覽器上看到的那么多(這有可能是網(wǎng)頁使用了動態(tài)加載的原因)。
2. 添加請求頭的爬蟲
上述講到的三種情況,怎樣解決呢?基本方式是添加一個請求頭(請求頭的字段通常只需添加user-agent字段即可,用來模擬瀏覽器訪問;然而有的網(wǎng)站用Python爬蟲來訪問時,可能還要添加其他字段,最好是把這個網(wǎng)頁所有請求頭字段信息全部添加上;有的網(wǎng)頁全部請求頭字段信息全部添加上,然而也訪問不到數(shù)據(jù),這種情況小編也沒有什么好的解決辦法,不知道使用selenium模塊直接操控瀏覽器是否可以,沒有試過)。
- 如用urllib模塊來訪問bilibili網(wǎng)站時會報錯,如下:
但是添加請求頭之后,就可以正常訪問了。
參考代碼如下:
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'))
- 如用urllib模塊來訪問百度網(wǎng)站時會出現(xiàn)如下情況:
很顯然,這個網(wǎng)頁不可能就這么點代碼標(biāo)簽,添加一個請求頭之后,如下:
3. 動態(tài)網(wǎng)頁加載的數(shù)據(jù)
提到動態(tài)網(wǎng)頁,讀者首先可以去看看小編的這篇文章:Python爬蟲:什么是靜態(tài)網(wǎng)頁(數(shù)據(jù)),什么是動態(tài)網(wǎng)頁(數(shù)據(jù)),小編學(xué)習(xí)過后端知識,大體知道為什么用上述方式訪問不到相應(yīng)的數(shù)據(jù)。why(大概是這樣吧!也有可能講的不對,希望讀者指正[如果有錯誤的話],一般而言,我們用爬蟲爬取得到的數(shù)據(jù)是當(dāng)前網(wǎng)頁已經(jīng)完全加載的,然而動態(tài)網(wǎng)頁使用了ajax技術(shù),而執(zhí)行者一段ajax代碼好像是網(wǎng)頁完全加載之后才執(zhí)行的,因此你用爬蟲爬取不到那部分?jǐn)?shù)據(jù)。)
此時,你有兩種解決方式:
- 找到這個ajax的相關(guān)網(wǎng)頁鏈接,訪問這個鏈接,從而得到相關(guān)數(shù)據(jù);
- 直接使用selenium這個模塊,操作瀏覽器訪問。
如果讀者使用第1種解決方式,有可能你訪問的那個鏈接一些參數(shù)是加密的,這時你需要利用js斷點(使用谷歌瀏覽器),找到那段加密參數(shù)加密之前的數(shù)據(jù)信息和相關(guān)的一些js加密函數(shù),找到加密之前的數(shù)據(jù)信息的組合規(guī)則。關(guān)于js加密函數(shù),如果簡單的話,直接用Python模擬出加密效果即可;如果復(fù)雜的話,最好使用execjs或者其他Python模塊下的一些方法去執(zhí)行這些js加密函數(shù)。
上述關(guān)于使用第1種解決方式,小編過去做過的有Python爬蟲爬取酷狗音樂、網(wǎng)易云音樂、斗魚視頻等。有興趣的讀者可以去看看小編的爬蟲專欄,鏈接為:https://blog.csdn.net/qq_45404396/category_9687415.html,當(dāng)然,有一些文章發(fā)表在博客園,博客主頁為:https://www.cnblogs.com/liuze-2/文章來源:http://www.zghlxwxcb.cn/news/detail-454702.html
4. 總結(jié)
有的讀者也許會問,如果我ip封掉了,怎樣爬取網(wǎng)頁數(shù)據(jù),其實,使用相關(guān)ip代理即可,讀者可以去看看小編的爬蟲專欄,里面有講ip代理的相關(guān)文章。另外,還有一些高大上的反爬措施,小編并不是很了解,就不在這一一贅述了,如果未來小編真的了解到了,到時候再在本文章后加上吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-454702.html
到了這里,關(guān)于Python爬蟲:為什么你爬取不到網(wǎng)頁數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!