(一)剛?cè)肱老x坑(2)——urllib.request庫(kù)的使用(1)

(一)剛?cè)肱老x坑(1)——爬蟲簡(jiǎn)介?中提到過(guò)urllib2這個(gè)庫(kù),這個(gè)庫(kù)是python2.7自帶的模塊,不需要下載。

本篇使用python3,urllib2在python3中被修改為urllib.request。


urlopen():

????urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None)

????????url : url地址

????????data:指明發(fā)往服務(wù)器請(qǐng)求中的額外的信息

????????timeout:連接超時(shí)

????????cafile、capath、cadefault:跟證書有關(guān),一般不用

????????context:上下文

? ? 下面寫一個(gè)小例子:

此時(shí)可以看到控制臺(tái)打印出的html代碼。
但是urlopen有一個(gè)弊端,就是不能模擬瀏覽器進(jìn)行請(qǐng)求,想要模擬瀏覽器進(jìn)行請(qǐng)求,就得需要修改header里面的User-Agent,可以從源碼中看到,此時(shí)的User-Agent是Python-urllib,明顯就是爬蟲,所以這個(gè)在實(shí)際的爬蟲項(xiàng)目中并不能使用。

? ?如果想模擬瀏覽器發(fā)送請(qǐng)求,可以自定義一個(gè)request,填寫一個(gè)瀏覽器的User-Agent,直接上代碼:

此時(shí)可以看到控制臺(tái)打印出的html代碼。??

? ? 剛才的代碼中只是輸出了html,response里面還有很多的信息,可以一個(gè)一個(gè)打印看一下。

最常用的三個(gè)方法。

????User-Agent是反爬蟲的第一步,但不能只是一個(gè)User-Agent,可以寫一個(gè)列表,然后每一次請(qǐng)求都換一個(gè)User-Agent才能更好的欺騙服務(wù)器。

? ? 代碼如下:? ??


切記每一次請(qǐng)求都要帶User-Agent

urlencode():

? ? 在使用百度搜索引擎的時(shí)候,搜索是使用了get方式進(jìn)行請(qǐng)求,傳遞了wd=****的參數(shù)。

? ? 我們可以把瀏覽器地址復(fù)制一下,粘貼到文檔中,可以發(fā)現(xiàn)url變樣了,漢字變成了另一種編碼。

? ? ? ? https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6%E8%B4%B4%E5%90%A7

? ? 這就是URL的編碼,在做爬蟲的時(shí)候也需要對(duì)一些文字做一些編碼轉(zhuǎn)換,直接上代碼:

運(yùn)行后可以得到一個(gè)url地址,然后把這個(gè)url地址放入到真實(shí)的瀏覽器中,跳轉(zhuǎn)的就是百度搜索“百度貼吧”的網(wǎng)站。

????????urlencode方法把鍵值對(duì)形式{ "wd" : "百度貼吧" }轉(zhuǎn)換成了字符串形式"wd=%E7%99%BE%E5%BA%A6%E8%B4%B4%E5%90%A7",同時(shí)也對(duì)漢字進(jìn)行了編碼操作。


????上面只是測(cè)試了幾個(gè)方法,接下來(lái)使用上面寫的方法做一個(gè)小案例,寫一個(gè)百度貼吧的爬蟲。

此時(shí)會(huì)在當(dāng)前目錄下生成十個(gè)html文件,打開看就是獲取的內(nèi)容。

? ? 上面代碼就是都是GET請(qǐng)求的方式,也就是把參數(shù)拼接在url中,接下來(lái)我們研究一下POST請(qǐng)求:

? ? ? ? urlopen()中有一個(gè)參數(shù)是data,它就是POST請(qǐng)求中傳遞參數(shù)的方式,可以試試寫一個(gè)關(guān)于有道翻譯的POST請(qǐng)求,話不多說(shuō)直接上代碼:

上面代碼運(yùn)行獲取的Json數(shù)據(jù)

? ? 這里面的headers中的數(shù)據(jù) 和?post_data數(shù)據(jù)?可以直接從抓包工具或者瀏覽器中復(fù)制。

? ? headers里面有一個(gè)cookies,在某一些網(wǎng)站是需要登陸然后才能瀏覽到數(shù)據(jù),此時(shí)就可以使用cookies繞過(guò)登錄界面,直接進(jìn)行頁(yè)面的抓取。這個(gè)以后會(huì)經(jīng)常遇到,接下來(lái)會(huì)介紹到。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容