[問題] requests with open write下載檔案錯誤

作者: wario2014 (wario2014)   2021-04-09 03:28:41
大家好新手發問
程式碼
import requests
url =
"https://www.sec.gov/Archives/edgar/data/320193/000032019320000096\
/aapl-20200926_htm.xml"
r = requests.get(url, timeout=(60, 60))
with open('A:/aapl-20200926_htm.xml', 'wt', encoding="utf-8") as f:
f.write(r.text)
f.close()
r.close()
我想在sec網站下載資料檔案,但是光是這個單一連結,我執行十次,就有二,三次會
變成只有5KB的檔案,每次手動執行都有間隔相當時間避開request限制
https://i.stack.imgur.com/hBKiL.jpg
我在RAM disk,USB 都試過,timeout加大變小,都會發生
環境是vs code , python 3.8
請問是哪裡沒弄好,先謝謝了
作者: x94fujo6   2021-04-09 04:58:00
看一下失敗時的內容吧5~6KB那個頁面就是說你被擋了https://i.imgur.com/fYY7xqt.pngtimeout是伺服器沒回應時等多久
作者: wario2014 (wario2014)   2021-04-09 05:30:00
可是python 沒有跳錯誤訊息,被擋應該會403不是嗎而且它這每秒十個規則,我遠遠超過十秒二十秒我都試過
作者: x94fujo6   2021-04-09 05:52:00
因為沒有錯誤 只是回傳的不是你要的檔案是這個網頁你加一條 print(r.text) 看資料就知道了
作者: wario2014 (wario2014)   2021-04-09 05:57:00
嗯,的確是403,印了status code,我了解了,謝謝你看來sec實際的限制嚴格許多,估計一分鐘只能下兩次
作者: x94fujo6   2021-04-09 06:06:00
試試 https://www.data.gov/ 有沒有你要的資料
作者: wario2014 (wario2014)   2021-04-09 06:24:00
感謝,我找找,另外403文擋裡有寫declare your trafficby update user agent to include company info隨便亂寫也行得通嗎,感覺沒這麼容易
作者: cuteSquirrel (松鼠)   2021-04-10 18:10:00
可以參閱證監會的爬蟲policyhttps://www.sec.gov/robots.txt
作者: wario2014 (wario2014)   2021-04-10 22:28:00
感謝,持續吸收中,當中的"disallow" /cgi-bin可以理解成(連結略)/cgi-bin/browse-edgar?CIK=0000320193這種讓browser走的路徑,是不適合script用的,對嗎 ?

Links booklink

Contact Us: admin [ a t ] ucptt.com