2015-06-12 25 views
4

我試圖從gsmarena下載數據。下載HTC one me spec的示例代碼來自以下網站「http://www.gsmarena.com/htc_one_me-7275.php」,如下所述:避免在使用scrapy的網站上禁止使用

網站上的數據以表格和表格行的形式分類。 數據的格式爲:

table header > td[@class='ttl'] > td[@class='nfo'] 

Items.py文件:

import scrapy 

class gsmArenaDataItem(scrapy.Item): 
    phoneName = scrapy.Field() 
    phoneDetails = scrapy.Field() 
    pass 

蜘蛛文件:

from scrapy.selector import Selector 
from scrapy import Spider 
from gsmarena_data.items import gsmArenaDataItem 

class testSpider(Spider): 
    name = "mobile_test" 
    allowed_domains = ["gsmarena.com"] 
    start_urls = ('http://www.gsmarena.com/htc_one_me-7275.php',) 

    def parse(self, response): 
     # extract whatever stuffs you want and yield items here 
     hxs = Selector(response) 
     phone = gsmArenaDataItem() 
     tableRows = hxs.css("div#specs-list table") 
     for tableRows in tableRows: 
      phone['phoneName'] = tableRows.xpath(".//th/text()").extract()[0] 
      for ttl in tableRows.xpath(".//td[@class='ttl']"): 
       ttl_value = " ".join(ttl.xpath(".//text()").extract()) 
       nfo_value = " ".join(ttl.xpath("following-sibling::td[@class='nfo']//text()").extract()) 
       colonSign = ": " 
       commaSign = ", " 
       seq = [ttl_value, colonSign, nfo_value, commaSign] 
       seq = seq.join(seq) 
     phone['phoneDetails'] = seq 
     yield phone 

但是,我越來越只要我試圖取締甚至使用scrapy外殼加載頁面:

"http://www.gsmarena.com/htc_one_me-7275.php" 

我甚至嘗試在settings.py中使用DOWNLOAD_DELAY = 3。

請建議我應該如何去做。

回答

3

這可能是由於Scrapy的用戶代理。如您所見,hereBOT_NAME變量用於組成USER_AGENT。我的猜測是,你想抓取的網站阻止了這一點。我試圖看看他們的robots.txt file,但從那裏沒有線索。

您可以嘗試設置自定義的UserAgent。在您的settings.py添加以下行:

USER_AGENT = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0" 

其實,你USER_AGENT大概可能是anyone related to a browser

+1

有趣...我試圖用UserAgent切換器在網站上玩耍,現在我根本無法加載任何頁面!這個網站可能有一個非常嚴格的禁止IP地址的用戶的政策,如果它們出現在任何表示爬蟲的UserAgent上,所以你可能暫時無法加載它。 – FBidu

2

如果網站顯然不希望在所有刮掉,制定了新的解決辦法只能拖延不可避免的 - - 他們會制定一個新的規則,以防止你的新技巧出現,而你又回到了原點。

與網站管理員交談 - 除非他們防止爲了讓別人生活變得艱難(就像一些商業實體一樣),否則他們可能會有一個很好的選擇,比如API或(付費)飼料訂閱。

2

要添加到「設置一個真正的用戶代理和假裝是一個真正的瀏覽器」的故事,在這裏,我已經在GitHub上上傳了一箇中間件:

它基於fake-useragent package,並基於實際瀏覽器使用情況統計信息爲每個請求使用不同的隨機User-Agent標頭。


此外,請確保您沒有違反任何規則或使用本網站的條款。另請參見: