python使用requests大批量请求卡住怎么解决?
毕业设计
1
我用python的request抓取别人网站抓了几100条左右就卡死了是什么情况?
page=request.GET.get('page')
for pages in range(1,int(page)+1):
data = requests.get("http://okokzy.cc/?m=vod-type-id-1-pg-"+str(pages)+".html")
data.encoding = "utf-8"
data = data.text
data = etree.HTML(data)
name = data.xpath("//div[@class='xing_vb']/ul/li/span[@class='xing_vb4']/a/text()")
link = data.xpath("//div[@class='xing_vb']/ul/li/span[@class='xing_vb4']/a/@href")
listcode = 0
print(link)
没有任何报错也没有发现任何异常就是打印出来的东西打印到某一条到时候就不动了。
-
目前有两种方法解决,一种是更改dns,并且推荐阿里的dns,因为他们认为这里的卡住是因为卡在了dns解析那里。
另一种则是设置全局的socket超时时间,通过
import socket socket.setdefaulttimeout(时间)
这两句代码来解决。
-
首先你的request最好设置一下超时,如果某个链接长时间没响应,你就会阻塞在那里;
然后得百分百确认你的xpath是正确的,且是匹配里面所有url的,这个地方可以打个日志,看看是阻塞在某次循环了,还是xpath没有解析到数据。
-
刚才我尝试了下,这个是因为这个网站有防爬措施导致的,如果在请求的时候,加上请求头,这个就可以了。我这个代码写的比较简单,这样的网站规律都是一样的,可以采用多线程或者异步方式爬取速度会更快。
发表回复