网络爬虫的要求有几点
一. 一个好的网页解释器,python推荐BeautifulSoup,java推荐htmlparser。
二. 良好的性能,不能太慢,当遇上网络状况不大好的时候,慢更受不了,所以通常需要同时启动N个网络爬虫进行工作.使用队列可以很好解决这个问题。优化性能常见解决方案------队列辅助多线程。
三. 稳定性,容错性。网络本来就存在不稳定性,连接超时,连接重置等是常见的不稳定现象,网络爬虫程序要充分妥当地处理这些问题,保证爬虫输出结果的完整性。
技巧
一. 基本的抓取
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请求
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改成该网站即可。