簡體   English   中英

Python機械化返回HTTP 429錯誤

[英]Python mechanize returns HTTP 429 error

我試圖通過mechanize模塊通過python執行自動化任務:

  1. 在網絡表單中輸入關鍵字,然后提交表單。
  2. 在響應中查找特定元素。

這是一次性的。 現在,我為關鍵字列表重復此任務。

並且正在收到HTTP錯誤429(請求過多)。

我嘗試以下解決方案:

  1. 添加自定義標頭(我通過使用代理將其專門記錄在該網站上),使它看起來像合法的瀏覽器請求。

     br=mechanize.Browser() br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36')] br.addheaders = [('Connection', 'keep-alive')] br.addheaders = [('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8')] br.addheaders = [('Upgrade-Insecure-Requests','1')] br.addheaders = [('Accept-Encoding',' gzip, deflate, sdch')] br.addheaders = [('Accept-Language','en-US,en;q=0.8')]` 
  2. 由於每第5個請求都會出現阻止的響應,因此我嘗試在5個請求后睡眠20秒。

兩種方法均無效。

您需要限制請求的速率,以符合服務器配置所允許的范圍。 網絡抓取工具:單個域每分鍾/小時的請求限制?可能顯示允許的速率)

mechanize使用urllib2的補丁程序版本( Lib/site-packages/mechanize/_urllib2.py )進行網絡操作,其Browser類是_urllib2_fork.OpenerDirector的后代。

因此,修補其邏輯的最簡單方法似乎是向您的Browser對象添加一個handler

  • 使用default_open和適當的handler_order將其放置在所有人之前(優先級較低)。
  • 直到請求符合Token桶Leaky桶算法(例如使用urllib2Throttling中實現)時,該請求才停止。 請注意,存儲桶可能應該是每個域或每個IP。
  • 最后return None將請求推送到以下處理程序

由於這是普遍需要,因此您可能應該將實現發布為可安裝的程序包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM