python爬蟲遇到403錯誤的問題及解決
python爬蟲遇到403錯誤
這段時間我很想去p站爬一爬,之前有試過,但都失敗了,有一次用phantomJS嘗試,結(jié)果卡死在登錄頁面,太復雜了。
有一次卡死在編碼上,一直無法獲取到頁面。
這次是卡死在403上,我獲取了圖片的鏈接,正要下載時彈出403錯誤,圖片在瀏覽器上也打不開,我還以為是網(wǎng)站把我的ip封掉了,就放棄了,后來聽一位大神說,有的時候需要向網(wǎng)頁發(fā)送一些請求頭吃才能下載東西(我是第一次聽說urllib.request.urltrieve也能添加請求頭)真是長見識了。
經(jīng)過自己的摸索,發(fā)現(xiàn)在p站下載高清大圖需要給服務器發(fā)送一個”Referer”參數(shù),用來告訴服務器你是從哪個網(wǎng)址進入圖片鏈接的。
而且p站的圖片頁沒有單獨的json文件加載,它的json數(shù)據(jù)全存在html文件里,真是見了鬼(我還以為那段代碼是亂碼)。
p站還是牛逼啊,我大概花了兩天時間才搞懂這些。
代碼:
import urllib.request import ssl ssl._create_default_https_context = ssl._create_unverified_context url = "https://i.pximg.net/img-original/img/2016/12/25/05/10/36/60541651_p0.jpg" opener = urllib.request.build_opener() opener.addheaders=[('Referer', "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=60541651")] urllib.request.install_opener(opener) urllib.request.urlretrieve(url,"E://miku.jpg")
python爬蟲代碼錯誤的解決
在做數(shù)據(jù)抓取的時候經(jīng)常會遇到各種各樣的問題,這些問題就是新手小白經(jīng)常會遇到的代碼問題。
1、爬取https的網(wǎng)站或是接口的時候,如果是不受信用的SSL證書,會報錯,需要添加如下代碼
如下代碼可以保證當前代碼塊內(nèi)所有的請求都自動屏蔽ssl證書問題:
import ssl # 這個是爬取https的鏈接需要的,以及下面一行代碼 ssl._create_default_https_context = ssl._create_unverified_context
2、爬取jsonp的接口,返回的數(shù)據(jù)需要刪除callback名字和最外層括號,可以通過以下方式過濾:
text方法將取得的數(shù)據(jù)轉(zhuǎn)為文本,然后re.match將字符串過濾掉callback名字和最外層括號,留下原本json部分的數(shù)據(jù),然后通過json.loads將過濾出來的json轉(zhuǎn)為python對象
import re getOneSongInfoCallback=json.loads(re.match(".*?({.*}).*", requests.get(url, headers=headers).text)[1])
3、獲取請求的地址后面跟的參數(shù)的方法,如下方式得到qs就可以進一步直接獲取自己想要的參數(shù)值:
import urllib.parse as parse parse_query=parse.urlparse(url).query qs=parse.parse_qs(parse_query)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python實現(xiàn)的一個火車票轉(zhuǎn)讓信息采集器
這篇文章主要介紹了python實現(xiàn)的一個火車票轉(zhuǎn)讓信息采集器,采集信息來源是58同程或者趕集網(wǎng),需要的朋友可以參考下2014-07-07Python利用D3Blocks繪制可動態(tài)交互的圖表
今天小編給大家來介紹一款十分好用的可視化模塊,D3Blocks,不僅可以用來繪制可動態(tài)交互的圖表,并且導出的圖表可以是HTML格式,方便在瀏覽器上面呈現(xiàn),感興趣的可以了解一下2023-02-02python matplotlib折線圖樣式實現(xiàn)過程
這篇文章主要介紹了python matplotlib折線圖樣式實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11Python實現(xiàn)的將文件每一列寫入列表功能示例【測試可用】
這篇文章主要介紹了Python實現(xiàn)的將文件每一列寫入列表功能,涉及Python文件讀取、遍歷、序列追加、賦值等相關操作技巧,需要的朋友可以參考下2018-03-03