一. 一個好的網頁解釋器,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()
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)
通常經過post方式提交數據,能夠利用F12開發者工具分析提交的數據包,而後構建相應的post數據發送http請求cookie
某些網站反感爬蟲,拒絕請求。能夠經過修改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 )
header裏面,referer站點是否是他本身,因此咱們只須要把headers的referer改爲該網站便可。多線程