Python爬蟲須要注意的技巧

網絡爬蟲的要求有幾點


一.  一個好的網頁解釋器,python推薦BeautifulSoup,java推薦htmlparser。html


二. 良好的性能,不能太慢,當趕上網絡情況不大好的時候,慢更受不了,因此一般須要同時啓動N個網絡爬蟲進行工做.使用隊列能夠很好解決這個問題。優化性能常看法決方案------隊列輔助多線程。java


三. 穩定性,容錯性。網絡原本就存在不穩定性,鏈接超時,鏈接重置等是常見的不穩定現象,網絡爬蟲程序要充分穩當地處理這些問題,保證爬蟲輸出結果的完整性。python


技巧

一. 基本的抓取
import urllib2
content=urllib2.urlopen("http://baidu.com").read()
二. 使用代理服務器

通常,抓去大量數據時,最好使用代理。防止IP被封,下載次數受限等。瀏覽器

import urllib2 

proxy_support=urllib2.ProxyHandler({'http':'http://XX.XX.XX.XX:XXXX'})
opener=urllib2.build_opener(proxy_support,urllib2.HTTPHandler)
urllib2.install_opener(opener) 
content=urllib2.urlopen('http://XXXX').read()
三. 須要登陸時
1. 使用cookie
import urllib2,cookielib 

cookie_support=urllib2.HTTPCookieProcessor(cookielib.CookieJar())
opener=urllib2.build_opener(cookie_support,urllib2.HTTPHandler)
urllib2.install_opener(opener) 
content=urllib2.urlopen('http://XXXX').read()

 若想同時使用cookie和代理,則opener換成
服務器

opener=urllib2.build_opener(proxy_support,cookie_support,urllib2.HTTPHandler)
2. 處理表單

通常經過post方式提交數據,能夠利用F12開發者工具分析提交的數據包,而後構建相應的post數據發送http請求cookie

3. 假裝成瀏覽器

某些網站反感爬蟲,拒絕請求。能夠經過修改http包的header來假裝網絡

headers={
‘User-Angent’: 'Mozilla/5.0(Windows;U;WindowsNT6.1;en-US;rv:1.9.1.6)Gecko/20091201Firefox/3.5.6'
}
req=urllib2.Request(
    url="http://...",
    data=postData,
    headers=headers
)
4. 反盜鏈

header裏面,referer站點是否是他本身,因此咱們只須要把headers的referer改爲該網站便可。多線程

參考文檔:http://blog.csdn.net/nn179/article/details/7770768工具

                http://wenku.baidu.com/link?post

相關文章
相關標籤/搜索