python 網(wǎng)絡爬蟲初級實現(xiàn)代碼
首先,我們來看一個Python抓取網(wǎng)頁的庫:urllib或urllib2。
那么urllib與urllib2有什么區(qū)別呢?
可以把urllib2當作urllib的擴增,比較明顯的優(yōu)勢是urllib2.urlopen()可以接受Request對象作為參數(shù),從而可以控制HTTP Request的header部。
做HTTP Request時應當盡量使用urllib2庫,但是urllib.urlretrieve()函數(shù)以及urllib.quote等一系列quote和unquote功能沒有被加入urllib2中,因此有時也需要urllib的輔助。
urllib.open()這里傳入的參數(shù)要遵循一些協(xié)議,比如http,ftp,file等。例如:
urllib.open('http://www.baidu.com')
urllib.open('file:D\Python\Hello.py')
現(xiàn)在有一個例子,下載一個網(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)頁,然后提取我們所需要的數(shù)據(jù)。
實際上,我們利用urllib這個模塊來做網(wǎng)絡爬蟲效率是極其低下的,下面我們來介紹Tornado Web Server。
Tornado web server是使用Python編寫出來的一個極輕量級、高可伸縮性和非阻塞IO的Web服務器軟件,著名的Friendfeed網(wǎng)站就是使用它搭建的。Tornado跟其他主流的Web服務器框架(主要是Python框架)不同是采用epoll非阻塞IO,響應快速,可處理數(shù)千并發(fā)連接,特別適用用于實時的Web服務。
用Tornado Web Server來抓取網(wǎng)頁效率會比較高。
從Tornado的官網(wǎng)來看,還要安裝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的常見方法:
(1)info() 獲取網(wǎng)頁的Header信息
(2)getcode() 獲取網(wǎng)頁的狀態(tài)碼
(3)geturl() 獲取傳入的網(wǎng)址
(4)read() 讀取文件的內(nèi)容
相關文章
Python中用于去除空格的三個函數(shù)的使用小結(jié)
這篇文章主要介紹了Python中用于去除空格的三個函數(shù)的使用小結(jié),對strip()和lstrip()和rstrip()這三個函數(shù)做了簡單的講解,需要的朋友可以參考下2015-04-04
python實現(xiàn)在pickling的時候壓縮的方法
這篇文章主要介紹了python實現(xiàn)在pickling的時候壓縮的方法,比較具有實用價值,需要的朋友可以參考下2014-09-09
Python報錯:NameError:?name?‘xxx‘?is?not?defined的解決辦法
這篇文章主要給大家介紹了關于Python報錯:NameError:?name?‘xxx‘?is?not?defined的解決辦法,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-06-06
Python使用textract實現(xiàn)從各種文件中提取文本信息
textract是一個強大的Python庫,可以用于從各種文件格式中提取文本,本文將介紹textract的使用場景,以及一些常用的Python代碼案例,希望對大家有所幫助2024-01-01
Pycharm及python安裝詳細步驟及PyCharm配置整理(推薦)
這篇文章主要介紹了Pycharm及python安裝詳細步驟以及PyCharm配置整理,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04

