2012-12-03 3 views
1

웹 사이트에서 데이터 수집을 위해 Scrapy BaseSpider를 사용하고 있습니다. 스크래퍼는 제품 디스플레이 페이지에서 시작하여 '다음'페이지 링크로 이동하고 각 페이지에서 특정 데이터를 수집하여 CSV 파일에 저장합니다. 스파이더는 올바르게 실행되지만 1 페이지, 2 페이지 및 마지막 페이지 (36 페이지)에서만 데이터를 수집합니다. 몇 시간 동안 코드를 조작 한 후 이유를 알 수 없습니다. 다음 코드는 내 거미를 보여줍니다. 어떤 제안?모든 페이지에서 데이터를 수집하지 못합니다.

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

당신의 코드가 파손, 볼이이 라인

if not not relative_next_page:

에 문제가 생각하는'사이트에서 사이트에 대한'라인. 아래 줄은 들여 쓰이지 않습니다. 청소를하면 도움이 될 것입니다. –

+0

비슷한 설정으로 다른 웹 사이트에서이 코드를 사용했는데 제대로 작동합니다. 그것은 일부 특정 스크래핑 메커니즘 (facepalm) 때문에이 특정 사이트에서 작동하지 않습니다. 여기서 교훈은 모든 다른 시나리오에서 코드를 시도하는 것입니다. 어쨌든 코드가 누군가를 돕기를 바랍니다. – Anike

답변

관련 문제