日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

网络爬虫初级

發(fā)布時(shí)間:2024/4/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络爬虫初级 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先,我們來(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:D\Python\Hello.py')


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

import re import urllibdef getHtml(url):page = urllib.urlopen(url)html = page.read()return htmldef getImg(html):reg = r'src="(.*?\.gif)"'imgre = re.compile(reg)imgList = re.findall(imgre,html)print imgListcnt = 1for imgurl in imgList:urllib.urlretrieve(imgurl,'%s.jpg' %cnt)cnt += 1if __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編寫出來(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.httpclientdef 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.codeall_fields = http_response.headers.get_all()for field in all_fields:print fieldprint http_response.bodyif __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)容

?

?


總結(jié)

以上是生活随笔為你收集整理的网络爬虫初级的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。