1.运行一段时间之后线程卡死

如果你使用的是requests库,那么请替换为urllib2,为什么requests式我都试过,无效。所以最后替换了requests。
Note:如果你使用的是pyquery,那么请注意你内部是使用的urllib库还是request库,如果你不清楚请手动替换 urllib2,然后使用pyquery直接解析网页内容。

proxy_support = urllib2.ProxyHandler(proxies)
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)
req = urllib2.Request(url=url, headers=headers(url=url))
res = urllib2.urlopen(req, timeout=30)
html = pq(res.read())
2.遇见 IncompleteRead异常

如果遇见这个问题,可以参见博客 ​​http://blog.sina.com.cn/s/blog_70f7f2c70102v7e9.html​​ 解决之后的代码如下:

import httplib

def open_url(url):
httplib.HTTPConnection._http_vsn=10
httplib.HTTPConnection._http_vsn_str = 'HTTP/1.0'
...
...
res = urllib2.urlopen(req, timeout=30)
html = pq(res.read())
3.遇见 BadStatusLine异常

这里仅仅是我遇见的两种情况

  1. 域名后期被修改
  2. 增加Header
req = urllib2.Request(url=url, headers=headers(url=url))
4.总结
  1. 爬取前请一定要懂得python的字符编码,否则可能出现各种异常。最好的方式是过程中统一使用unicode,然后最终结果按照要求存储即可。
if not isinstance(keywords, unicode):
keywords = keywords.decode('utf-8')

2.处理异常,访问网络的时候可能会出现各种网络异常。尽可能的获取数据。