這隻爬蟲已經執行一陣子了:爬蟲原始碼 for 《Rakuten kobo 每週 99 元特價書單》
最近出現奇怪的 warning(但可以順利執行):
[protego] DEBUG: Rule at line 1 without any user agent to enforce it on.
[protego] DEBUG: Rule at line 2 without any user agent to enforce it on.
...
明明我已經好幾個月沒更新了啊,為什麼突然出現這個 BUG?
合理的猜測是最近更新了 Python 的版本,不過我沒驗證,純粹由最近所做的事來推測。
忘了提過沒有,這個爬蟲程式有部分是請 ChatGPT 幫忙寫的,所以 DEBUG 也請他試試看囉。
以下是他的回覆:
這個錯誤訊息來自於 Scrapy 的 Protego 中間件,它通常用於檢查爬蟲是否遵守 robots.txt 檔案中的規則。這個特定的錯誤訊息是指在 robots.txt 檔案中找不到任何用戶代理(User-Agent),因此 Protego 無法對其執行規則。
可能的原因有:
- 未設置用戶代理(User-Agent):爬蟲未設置用戶代理,因此 Protego 無法對應到任何規則。
- robots.txt 檔案缺少規則:robots.txt 檔案中沒有針對該爬蟲的規則。
- 代理被阻止或限制:可能是由於代理服務被網站阻止或限制而導致無法訪問 robots.txt 檔案。
解決方法:
- 設置用戶代理:在爬蟲程式中添加用戶代理,可以模擬瀏覽器行為,並讓 Protego 能夠正確檢查 robots.txt 檔案。
- 檢查 robots.txt 檔案:確保網站的 robots.txt 檔案中存在適當的規則,並且爬蟲被允許訪問所需的頁面。
- 檢查代理設置:如果使用了代理服務,確保它沒有被網站阻止或限制,並且可以正常訪問 robots.txt 檔案。
這答案很接近了(可惜沒提到修改 scrapy 相關設定是在 settings.py
)。再次提醒:請 ChatGPT 寫程式的前提是:你要有能力判斷他在唬爛還是真的知道,還能自行除錯。
不過在 settings.py
新增了 USER_AGENT
設定後還是一樣。
必須把 ROBOTSTXT_OBEY
設為 False
才行。
# Crawl responsibly by identifying yourself (and your website) on the user-agent
- # USER_AGENT = 'ebook (+http://www.yourdomain.com)'
+ USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888'
# Obey robots.txt rules
- ROBOTSTXT_OBEY = True
+ ROBOTSTXT_OBEY = False