[问题] 如何被网页阻挡后,过几秒重连线?

楼主: kiloxx (名器)   2016-04-08 23:00:17
大家好!! 新手卡关再一问!
我想用urllib去urlopen一个网站
可是我有大量的资料要连续读取
for example:
for each_stock in stocks:
req=urllib.urlopen("http://www.example/each_stock")
table = req.find('table',{'class':'board')
可是因为我太频繁读取网站,网站会跳出一个网页写说
"太频繁读取,请稍后再来"(网址是一样的)
这样我就找不到我要的table
所以我想要请问
有没有什么方法可以让我可以过几秒之后再回去读取网页?
我用过time.sleep(10)方式,等10s去读没有用QQ
在urlopen后面加上timeout=20也没有用...因为不是被block的关系吧?
是被转到内容(网址没有变),所以加上timeout没有用....
卡了几天了,恳请帮忙m(_ _)m
作者: CaptainH (Cannon)   2016-04-08 23:13:00
等10秒不够就等20秒啊
作者: uranusjr (←這人是超級笨蛋)   2016-04-08 23:28:00
timeout 是指连不上的话在多久之后“放弃”, 不是你要的用 sleep 是最简单的解, 至于要等多久就要看网站而定
作者: s860134 (s860134)   2016-04-08 23:35:00
一楼最佳解XD 另外你可以多准备几个 proxy 来读urllib.request.ProxyHandler 
作者: busystudent (busystudent)   2016-04-09 00:07:00
其实你这样time.sleep(10)改成20秒不够好,你该试着让程式码依序停1秒或5秒time.sleep(randint(1,5))记得还要这一行from random import randint
作者: kenduest (小州)   2016-04-09 00:40:00
另外若你是对同一个网站下达抓取资料,建议多利用HTTP/1.1 的 keep-alive 方式连续抓取也就是一个 connection 下可以有多个 http request上面写法会变成切断连线之后重新产生一个新的连线建议可以装 requests 替代要使用 keep alive 比较快
作者: eight0 (欸XD)   2016-04-09 06:34:00
也可以参考 header "Retry-After"

Links booklink

Contact Us: admin [ a t ] ucptt.com