python爬虫误区集锦

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

如果你使用的是requests库,那么请替换为urllib2,为什么requests请参看:https://blog.csdn.net/pilipala6868/article/details/80712195 但是两种方式我都试过,无效。所以最后替换了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.处理异常,访问网络的时候可能会出现各种网络异常。尽可能的获取数据。

猜你喜欢

转载自blog.csdn.net/CAir2/article/details/88915149