在(一)剛?cè)肱老x坑(2)——urllib.request庫的使用(1)?中介紹了user-agent可以模擬成瀏覽器發(fā)送請求墓阀,也提到了代理咒循、使用cookies可以模擬登錄狀態(tài)與服務(wù)器通信勺良,這節(jié)主要研究一下罕扎。
做爬蟲程序的時(shí)候国拇,最怕的就是被封IP考廉,為了保證本機(jī)IP不被封禁昙篙,選擇使用代理IP的形式訪問服務(wù)器腊状。
urlopen()可以發(fā)送請求,可以使用user-agent苔可,但是不能使用代理缴挖,cookie等功能。
需要通過Handler處理器對象焚辅,設(shè)置代理IP醇疼,然后進(jìn)行訪問硕并。
Handler處理器對象和opener對象:
? ? ????從urllib.request的urlopen()源碼中可以看到,其實(shí)urlopen運(yùn)行的是一個(gè)特殊的opener對象秧荆,是已經(jīng)被構(gòu)建好的倔毙。大致過程是通過build_opener()方法使用Handler創(chuàng)建的處理器對象,創(chuàng)建自定義的opener對象乙濒。使用opener對象陕赃,調(diào)用open()方法發(fā)送請求。
? ? ? ? 下面就自定義一個(gè)簡單的opener對象:
? ? ? ? 上面這個(gè)opener對象也不能處理代理IP的問題颁股,所以我們需要使用其他的Handler么库,完成使用代理IP的目的:
? ? ? ? ? ? 上面代碼使用代理IP的范圍是固定的诉儒,如果這些IP都不能用了,只能去更改代碼里面的IP列表亏掀,換一批能用的忱反,這就很麻煩了。
? ? ? ? ? ? 解決這個(gè)問題滤愕,我們可以使用阿布云的代理IP温算,為了測試,買一個(gè)一元錢的就OK了间影。
Cookie的使用:
????????有一些網(wǎng)站是需要登錄狀態(tài)才能繼續(xù)瀏覽數(shù)據(jù)巩割,例如一些社交網(wǎng)站,或者有一些搜索引擎也有限制付燥,不登錄只能瀏覽部分?jǐn)?shù)據(jù)喂分,這個(gè)就需要用到cookie來搞定這個(gè)步驟。現(xiàn)在就用人人網(wǎng)做個(gè)例子机蔗,先登錄獲得cookie,然后用cookie跳過其他頁面的登錄驗(yàn)證: