[protego] DEBUG: Rule at line 1 without any user agent to enforce it on.

這隻爬蟲已經執行一陣子了:爬蟲原始碼 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 無法對其執行規則。

可能的原因有:

  1. 未設置用戶代理(User-Agent):爬蟲未設置用戶代理,因此 Protego 無法對應到任何規則。
  2. robots.txt 檔案缺少規則:robots.txt 檔案中沒有針對該爬蟲的規則。
  3. 代理被阻止或限制:可能是由於代理服務被網站阻止或限制而導致無法訪問 robots.txt 檔案。

解決方法:

  1. 設置用戶代理:在爬蟲程式中添加用戶代理,可以模擬瀏覽器行為,並讓 Protego 能夠正確檢查 robots.txt 檔案。
  2. 檢查 robots.txt 檔案:確保網站的 robots.txt 檔案中存在適當的規則,並且爬蟲被允許訪問所需的頁面。
  3. 檢查代理設置:如果使用了代理服務,確保它沒有被網站阻止或限制,並且可以正常訪問 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

不過如果把 ROBOTSTXT_OBEY 設為 False,那其實就不需要設定 USER_AGENT 了。