问题导读:
1. 抓取网页内容的思路是什么?
2. 如何提升爬虫容错性能?
解决方案:
爬虫思路
分析URL组成
一般我们要抓取的内容都是在2级,3级页面中,所以,我们的URL生产者可以通过分析URL组成构造URL,例如:
[mw_shl_code=applescript,true]http://www.().com/user/ul-1-1-1.html
http://www.().com/user/ul-3-1-1.html
http://www.().com/user/ul-4-1-1.html[/mw_shl_code]
只是ul-后面的不同,我们只要在1级页面抓取到ul后面的数字即可,更简单的是,如果ul后面的数字有规律,我们可以直接创建一个list遍历既可。
另外
如果URL组成没有规律,我们就能直接匹配超链接
最后
请求页面,(正则表达式)分析,得到我们需要内容
模拟登陆
- 分析post提交数据
- 验证码破解(pillow)
- rsa处理加密
异常处理
try:
response = urllib2.urlopen(request)
content = response.read().decode(encoding='gbk', errors='ignore').encode(encoding='utf-8', errors='ignore')
# <a href="/user/ul-10-1-55.html">55</a>
except:
content = ''
with open('./log/error.log', 'a') as l:
l.write(user_url_total + '\n')
pass
# 匹配到分页列表,最后一个,是pageTotal
pat = re.compile(r'<a href="/user/.*?">(\d*)</a>')
totalPage = re.findall(pat, content)
# 无分页(就一页)
if len(totalPage) == 0:
totalPage = ['1']
- 在抛出异常的时候,请求到页面致空
- 判断正则表达式是否匹配到信息,处理(正则表达式中可能是个list,一个页面都多个匹配到的,所以就是两个list)
- 写入log 文件
- 每一级页面设置一个标志变量,在向本地写时,同事将时间,标志变量写入log文件中,下次运行,直接从最后一个开始运行
入门案例
链接:http://pan.baidu.com/s/1pLCTHMF 密码:wijp
|
|