Python爬蟲基礎(chǔ):urllib庫(kù)的基本shiypn

urllib庫(kù)我們從下面的三個(gè)方面講解:

  • request: 它是最基本的HTTP請(qǐng)求模塊,可以用來模擬發(fā)送請(qǐng)求,就像在瀏覽器中輸入網(wǎng)址,然后敲擊回車鍵一樣,使用的時(shí)候只需要給庫(kù)方法傳入相關(guān)的URL和相關(guān)的參數(shù)即可.
  • error: 異常處理模塊,如果出現(xiàn)請(qǐng)求錯(cuò)誤,我們可以使用這個(gè)模塊來捕獲異常,然后進(jìn)行重試或者其他操作,保證程序不會(huì)意外終止.
  • parse: 這是一個(gè)工具模塊,提供了許多url的處理方法,比如拆分,解析,合并等等.
# 導(dǎo)入urllib.request 庫(kù)
import urllib.request

# 向指定的url發(fā)送請(qǐng)求,并返回服務(wù)器響應(yīng)的類文件對(duì)象
response = urllib.request.urlopen("http://www.baidu.com")

print(type(response))

# 類文件對(duì)象支持文件對(duì)象的操作方法,如read()方法讀取文件全部?jī)?nèi)容,返回字符串
html = response.read()

# 打印響應(yīng)結(jié)果(betys類型)
print (html)
# 打印狀態(tài)碼
print (response.status)
# 獲取響應(yīng)頭
print (response.getheaders())
# 獲取響應(yīng)頭信息
print (response.getheader('Server'))
# 獲取響應(yīng)結(jié)果原因
print (response.reason)

urlopen中通常設(shè)置如下的常用參數(shù):

  • url:設(shè)置目標(biāo)url
  • data:如果設(shè)置該參數(shù),則請(qǐng)求為post請(qǐng)求,否則是get請(qǐng)求
  • timeout:用于設(shè)置超時(shí)時(shí)間,單位為秒
  • context:必須是一個(gè)ssl.SSLContext類型,用來指定SSL設(shè)置,忽略未認(rèn)證的CA證書.

Request

當(dāng)我們需要進(jìn)行更復(fù)雜的操作或者網(wǎng)站的有反爬蟲機(jī)制的時(shí)候,這些參數(shù)是不夠的(比如要攜帶請(qǐng)求頭header),所有要 創(chuàng)建一個(gè)Request的實(shí)例,然后用作urlopen的參數(shù)

# 
import urllib.request

# url作為Request()方法的參數(shù),構(gòu)造并返回一個(gè)Request對(duì)象
ua_header = {"User-Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",}
request = urllib.request.Request("http://www.baidu.com",headers=ua_header)

# Request對(duì)象作為urlopen()方法的參數(shù),發(fā)送給服務(wù)器并接收響應(yīng)
response = urllib.request.urlopen(request)

#將獲取到的頁(yè)面源碼,轉(zhuǎn)為字符串
html = response.read().decode('utf-8')

也可以添加/修改User-Agent

# 
import urllib.request

# url作為Request()方法的參數(shù),構(gòu)造并返回一個(gè)Request對(duì)象
user_agent = {"User-Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",}
request = urllib.request.Request("http://www.baidu.com")
#也可以通過調(diào)用Request.add_header() 添加/修改一個(gè)特定的header
request.add_header("User-Agent", user_agent)
# get_header()的字符串參數(shù),第一個(gè)字母大寫,后面的全部小寫
request.get_header("User-agent")
# Request對(duì)象作為urlopen()方法的參數(shù),發(fā)送給服務(wù)器并接收響應(yīng)
response = urllib.request.urlopen(request)

#將獲取到的頁(yè)面源碼,轉(zhuǎn)為字符串
html = response.read().decode('utf-8')

隨機(jī)User-Agent三方庫(kù)的使用

https://github.com/hellysmile/fake-useragent
下載:

pip install fake-useragent

代碼實(shí)例:
from fake_useragent import UserAgent
ua = UserAgent()

ua.ie
# Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US);
ua.msie
# Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)'
ua['Internet Explorer']
# Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)
ua.opera
# Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11
ua.chrome
# Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2'
ua.google
# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13
ua['google chrome']
# Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
ua.firefox
# Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1
ua.ff
# Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1
ua.safari
# Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25

# and the best one, random via real world browser usage statistic
ua.random
?著作權(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)容