一. 一个好的网页解释器,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改为该网站便可。多线程