[問題] 如何被網頁阻擋後,過幾秒重連線?

作者: 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