2012-12-03 100 views
1

我正在使用Scrapy BaseSpider從網站收集數據。刮刀從產品展示頁面開始,在「下一頁」鏈接上移動,並從每個頁面收集某些數據並將其存儲到CSV文件中。蜘蛛程序運行正常,但僅從第1頁,第2頁和最後一頁(第36頁)收集數據。經過幾個小時的修改代碼之後,我無法弄清楚原因。以下代碼顯示了我的蜘蛛。有什麼建議麼?Scrapy蜘蛛不收集所有頁面的數據

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from scrapy.http.request import Request 
from longs.items import LongsItem 
from scrapy.utils.response import get_base_url 
import urlparse 

class LongsComSpider(BaseSpider): 
    name = "longs" 
    allowed_domains = ["longswines.com"] 
    start_urls = ["http://www.longswines.com/wines/?page=3&sortby=winery&item_type=wine"] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     sites = hxs.select("//div[@class='pagebox']/a[6]/@href") 
     for site in sites: 
      relative_next_page = site.extract() 
      next_page = [urlparse.urljoin(response.url, relative_next_page)] 
      if not not relative_next_page: 
      yield Request(next_page[0], self.parse) 

     products = hxs.select("//div[@class='productlistitem']") 
     items = [] 
     for product in products: 
      item = LongsItem() 
      item["title"] = product.select("div[1]/h2/a/text()").extract() 
      item["link"] = response.url 
      item["price"] = product.select("div[2]/h2/text()").extract() 
      item["details"] = product.select("div[1]/p/text()").extract() 
      items.append(item) 
     for item in items: 
      yield item 
+1

您的代碼被打破,看到'站點在站點:'線。下面的行不縮進。如果你清理它會更容易幫助你。 –

+0

我在不同的網站上使用此代碼,具有類似的設置,它的工作原理。它不適用於這個特定的網站,因爲一些反刮機制(facepalm)。這裏的教訓是在所有不同的場景下嘗試編碼。無論如何,希望代碼可以幫助某人。 – Anike

回答

0

我覺得你在這行

if not not relative_next_page:

有問題,你有兩個not