40

有沒有辦法解決以下問題?屏幕抓取:繞過「HTTP錯誤403:robots.txt不允許的請求」

httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt 

是解決這個問題的唯一辦法聯繫該網站所有者(barnesandnoble.com)..我要建一個網站,給自己帶來更多的銷售,不知道爲什麼他們會在某個深度拒絕訪問。

我在Python2.6上使用mechanize和BeautifulSoup。

希望有一個變通

+0

可能有法律問題,如果你打算賺錢,但如果你不」 t,請繼續。萬歲scroogle。 – 2010-05-17 00:44:35

回答

13

您可以嘗試躺在你的用戶代理(例如,通過努力使相信你是一個人,而不是機器人),如果你想在可能與巴恩斯的法律糾紛&貴族。爲什麼不與他們的業務發展部門聯繫並說服他們專門授權您?他們毫無疑問只是試圖避免讓他們的網站被諸如價格比較引擎之類的機器人所刮擦,如果你能說服他們你不是一個人,簽訂合同等,他們可能會願意你的例外。

一個「技術性」的解決方法,只是打破他們的政策,編碼在robots.txt是一種高度法律風險的方法,我永遠不會推薦。順便說一句,如何確實他們的robots.txt閱讀?

+0

他們的robots.txt只禁止「/reviews/reviews.asp」 - 這是你在刮的東西嗎? – fmark 2010-05-17 02:43:44

+0

感謝Alex,我同意......在閱讀了關於robots.txt的更多信息之後,這是最好的方法。乾杯... @fmark我颳了視頻部分... http://video.barnesandnoble.com/robots.txt – Diego 2010-05-18 00:38:27

+11

robots.txt沒有法律約束力。 (http://www.nytimes.com/2005/07/13/technology/13suit.html?ex=1278907200&en=377b4f3f0d459300&ei=5090&partner=rssuserland&emc=rss) – markwatson 2011-05-02 00:54:25

1

設置你的User-Agent頭匹配一些真正的IE/FF的User-Agent。

這裏是我的IE8用戶代理字符串:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; AskTB5.6) 
+0

不錯的作弊;)但在這種情況下它不起作用 – 2011-07-22 17:44:02

0

沒有辯論這個道德,你可以修改標題看起來像googlebot例如,或谷歌攔截以及?

+0

我沒有看到任何_ethical_問題,但_legal_問題可能會變得更糟(無論你模仿誰,都可以檢測到你,並且控告你的行爲被刪除,而不僅僅是B&N和你的ISP)。 「做這件非法事情,只是不被發現」並不是謹慎的建議,即使沒有道德問題(而且,我再說一遍,我沒有看到任何違反這些特定法律的事情 - 這對於冒險來說太冒險了潛在的收益太少了;-)。 – 2010-05-17 00:51:07

+0

在這種情況下,法律問題是一個道德問題,你是否遵循它。 – 2010-05-17 00:53:37

0

看起來,你必須做更少的工作繞過robots.txt,at least says this article。所以你可能需要刪除一些代碼來忽略過濾器。

+0

該文章更多關於自定義代碼來抓取網站。如果您正在使用某個庫,則該庫可能已經在尊重robots.txt。 – Niyaz 2012-10-16 04:39:43

4

機械化自動跟隨的robots.txt,但它可以被禁用假設你有權限,或者你已經通過認爲道德..

在瀏覽器中設置一個標誌:

browser.set_handle_equiv(False) 

這忽略robots.txt的。

此外,請確保你節制你的請求,所以你不要把太多的負載放在他們的網站上。 (請注意,這也使得它們不太可能檢測到並禁止你)。

+0

嘿,你是什麼意思,扼殺你的要求? – Diego 2010-05-18 00:39:31

+0

我的意思是,在每個請求(即time.sleep(1))之後設置一個小超時,並且不要使用多個線程。我會使用一些線程(以防有些陷入困境),幾秒鐘的睡眠。 – wisty 2010-05-18 01:21:58

+1

這不適用於機械化的當前版本 – 2014-10-24 13:31:52

2

您收到的錯誤與用戶代理無關。默認情況下機械化會在您使用它導航到網站時自動檢查robots.txt指令。使用mechanize.browser的.set_handle_robots(false)方法禁用此行爲。

183

哦,你需要忽略的robots.txt

br = mechanize.Browser() 
br.set_handle_robots(False) 
+6

這就是我正在尋找的。 – 2011-03-23 12:11:59

+3

正是我在找的,歡呼! – 2013-10-14 09:29:45

+0

祝您有美好的一天:-) – 2013-10-14 09:34:55

2

的代碼做一個正確的請求:

br = mechanize.Browser() 
br.set_handle_robots(False) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 
resp = br.open(url) 
print resp.info() # headers 
print resp.read() # content 
+0

解釋的唯一答案 - 我們如何設置標題以及禁用'robots.txt'處理。 – markroxor 2018-01-03 06:20:23