小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用python urllib進(jìn)行網(wǎng)頁(yè)爬取

 生信修煉手冊(cè) 2020-05-23
編寫一段程序,從網(wǎng)站上抓取特定資源,比如自動(dòng)化的下載kegg colorful pathway的通路圖,這樣的程序就是一個(gè)基礎(chǔ)的網(wǎng)絡(luò)爬蟲(chóng)了。在python中,通過(guò)內(nèi)置模塊urlib, 可以實(shí)現(xiàn)常規(guī)的網(wǎng)頁(yè)抓取任務(wù)。
該內(nèi)置模塊包含以下4個(gè)子模塊
  1. urllib.request

  2. urllib.error

  3. urllib.parser

  4. urllib.robotparser

其中urllib.request 子模塊是最常用的,用來(lái)從網(wǎng)站獲取源代碼。基本用法如下
import urllib.requestf = 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.parseimport 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·

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多