最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

python網(wǎng)絡(luò)爬蟲(chóng)初級(jí)實(shí)現(xiàn)代碼

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:35:18
文檔

python網(wǎng)絡(luò)爬蟲(chóng)初級(jí)實(shí)現(xiàn)代碼

python網(wǎng)絡(luò)爬蟲(chóng)初級(jí)實(shí)現(xiàn)代碼:首先,我們來(lái)看一個(gè)Python抓取網(wǎng)頁(yè)的庫(kù):urllib或urllib2。 那么urllib與urllib2有什么區(qū)別呢? 可以把urllib2當(dāng)作urllib的擴(kuò)增,比較明顯的優(yōu)勢(shì)是urllib2.urlopen()可以接受Request對(duì)象作為參數(shù),從而可以控制HTTP Request的header部。
推薦度:
導(dǎo)讀python網(wǎng)絡(luò)爬蟲(chóng)初級(jí)實(shí)現(xiàn)代碼:首先,我們來(lái)看一個(gè)Python抓取網(wǎng)頁(yè)的庫(kù):urllib或urllib2。 那么urllib與urllib2有什么區(qū)別呢? 可以把urllib2當(dāng)作urllib的擴(kuò)增,比較明顯的優(yōu)勢(shì)是urllib2.urlopen()可以接受Request對(duì)象作為參數(shù),從而可以控制HTTP Request的header部。

首先,我們來(lái)看一個(gè)Python抓取網(wǎng)頁(yè)的庫(kù):urllib或urllib2。

那么urllib與urllib2有什么區(qū)別呢?
可以把urllib2當(dāng)作urllib的擴(kuò)增,比較明顯的優(yōu)勢(shì)是urllib2.urlopen()可以接受Request對(duì)象作為參數(shù),從而可以控制HTTP Request的header部。
做HTTP Request時(shí)應(yīng)當(dāng)盡量使用urllib2庫(kù),但是urllib.urlretrieve()函數(shù)以及urllib.quote等一系列quote和unquote功能沒(méi)有被加入urllib2中,因此有時(shí)也需要urllib的輔助。

urllib.open()這里傳入的參數(shù)要遵循一些協(xié)議,比如http,ftp,file等。例如:

urllib.open('http://www.baidu.com')
urllib.open('file:DPythonHello.py')

現(xiàn)在有一個(gè)例子,下載一個(gè)網(wǎng)站上所有g(shù)if格式的圖片。那么Python代碼如下:

import re
import urllib

def getHtml(url):
 page = urllib.urlopen(url)
 html = page.read()
 return html

def getImg(html):
 reg = r'src="(.*?.gif)"'
 imgre = re.compile(reg)
 imgList = re.findall(imgre,html)
 print imgList
 cnt = 1
 for imgurl in imgList:
 urllib.urlretrieve(imgurl,'%s.jpg' %cnt)
 cnt += 1

if __name__ == '__main__':
 html = getHtml('http://www.baidu.com')
 getImg(html)

根據(jù)上面的方法,我們可以抓取一定的網(wǎng)頁(yè),然后提取我們所需要的數(shù)據(jù)。

實(shí)際上,我們利用urllib這個(gè)模塊來(lái)做網(wǎng)絡(luò)爬蟲(chóng)效率是極其低下的,下面我們來(lái)介紹Tornado Web Server。
Tornado web server是使用Python編寫(xiě)出來(lái)的一個(gè)極輕量級(jí)、高可伸縮性和非阻塞IO的Web服務(wù)器軟件,著名的Friendfeed網(wǎng)站就是使用它搭建的。Tornado跟其他主流的Web服務(wù)器框架(主要是Python框架)不同是采用epoll非阻塞IO,響應(yīng)快速,可處理數(shù)千并發(fā)連接,特別適用用于實(shí)時(shí)的Web服務(wù)。

用Tornado Web Server來(lái)抓取網(wǎng)頁(yè)效率會(huì)比較高。
從Tornado的官網(wǎng)來(lái)看,還要安裝backports.ssl_match_hostname,官網(wǎng)如下:

http://www.tornadoweb.org/en/stable/

import tornado.httpclient

def Fetch(url):
 http_header = {'User-Agent' : 'Chrome'}
 http_request = tornado.httpclient.HTTPRequest(url=url,method='GET',headers=http_header,connect_timeout=200,request_timeout=600)
 print 'Hello'
 http_client = tornado.httpclient.HTTPClient()
 print 'Hello World'

 print 'Start downloading data...'
 http_response = http_client.fetch(http_request)
 print 'Finish downloading data...'

 print http_response.code

 all_fields = http_response.headers.get_all()
 for field in all_fields:
 print field

 print http_response.body

if __name__ == '__main__':
 Fetch('http://www.baidu.com')

urllib2的常見(jiàn)方法:

(1)info() 獲取網(wǎng)頁(yè)的Header信息

(2)getcode() 獲取網(wǎng)頁(yè)的狀態(tài)碼

(3)geturl() 獲取傳入的網(wǎng)址

(4)read() 讀取文件的內(nèi)容

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

python網(wǎng)絡(luò)爬蟲(chóng)初級(jí)實(shí)現(xiàn)代碼

python網(wǎng)絡(luò)爬蟲(chóng)初級(jí)實(shí)現(xiàn)代碼:首先,我們來(lái)看一個(gè)Python抓取網(wǎng)頁(yè)的庫(kù):urllib或urllib2。 那么urllib與urllib2有什么區(qū)別呢? 可以把urllib2當(dāng)作urllib的擴(kuò)增,比較明顯的優(yōu)勢(shì)是urllib2.urlopen()可以接受Request對(duì)象作為參數(shù),從而可以控制HTTP Request的header部。
推薦度:
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top