使用python从大量URL抓取内容时,往往容易出现bug,如httplib.BadStatusLine: '',403,Socket Error。
很大一部分原因是服务器认为是恶意攻击不予响应。因此需要认为伪造报头来处理。
Chrome右键检查,Network,点开加载项header则可以看到报头信息。
req_header = {
'Host':'pic.581r.com',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Connection':'keep-alive',
}
timeout = 30
reee = urllib2.Request(link,None,req_header)
rsss = urllib2.urlopen(reee,None,timeout)
content2 = rsss.read()
with open(target,'wb') as code:
code.write(content2)
rsss.close()
time.sleep(1)
最好每次都把打开的内容关闭以防报错。