import urllib.request f = urllib.request.urlopen('https://www./') f.read().decode('utf-8') 該用法適用于處理簡(jiǎn)單的GET請(qǐng)求的網(wǎng)站資源,除了GET外,還要一種POST提交方式,需要從表單中獲取對(duì)應(yīng)數(shù)據(jù)。對(duì)于post請(qǐng)求,urllib也可以輕松實(shí)現(xiàn),用法如下 import urllib.parse import urllib.request
url = 'https://www.' # 表單數(shù)據(jù)用字典來(lái)存儲(chǔ) params = { 'gene':'tp53', 'pages':'10' } # 使用parse對(duì)url進(jìn)行正確的編碼 data = bytes(urllib.parse.urlencode(params), encoding='utf8') response = urllib.request.urlopen(url, data=data) response.read().decode('utf-8') urllib還有更加高級(jí)的玩法,舉例如下 1. 模擬瀏覽器 火狐,谷歌等網(wǎng)頁(yè)瀏覽器可以與網(wǎng)站交互,顯示對(duì)應(yīng)的網(wǎng)頁(yè),以谷歌瀏覽器為例,通過(guò)快捷鍵F12的調(diào)試模式,可以看到瀏覽器在發(fā)送HTTP請(qǐng)求時(shí)的頭文件,截圖如下 其中,紅框表示的部分就是瀏覽器的標(biāo)識(shí),拷貝其中的信息,就可以將程序偽裝成瀏覽器來(lái)與網(wǎng)站進(jìn)行交互,用法如下 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } request = urllib.request.Request('https://www./', headers = headers) response = urllib.request.urlopen(request) response.read().decode('utf-8') 部分網(wǎng)站禁止爬蟲(chóng)程序來(lái)獲取其資源,如果識(shí)別到一個(gè)不是瀏覽器的請(qǐng)求,會(huì)進(jìn)行攔截,偽裝成瀏覽器,可以通過(guò)網(wǎng)站反爬蟲(chóng)機(jī)制的第一個(gè)封鎖線。 2. 網(wǎng)站登錄 對(duì)于需要登錄后才可以獲取的網(wǎng)頁(yè),爬取的方式如下 url = 'https://www./' user = 'root' password = 'passwd' # 先進(jìn)行賬號(hào),密碼的驗(yàn)證 pwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() pwdmgr.add_password(None,url ,user ,password)
auth_handler = urllib.request.HTTPBasicAuthHandler(pwdmgr) opener = urllib.request.build_opener(auth_handler) response = opener.open(url) response.read().decode('utf-8') 一個(gè)健壯的爬蟲(chóng)程序是需要考慮很多的因素的,通過(guò)內(nèi)置的urllib只是可以滿足大多數(shù)自動(dòng)化下載的需求,如果要功能更加強(qiáng)大和晚上的爬蟲(chóng),就需要借助第三方模塊以及成熟的爬蟲(chóng)框架了。 ·end· |
|
來(lái)自: 生信修煉手冊(cè) > 《待分類》