【问题标题】:Scrapy spider does not collect data from all pagesScrapy 蜘蛛不会从所有页面收集数据
【发布时间】:2012-11-20 12:26:50
【问题描述】:

我正在使用 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

【问题讨论】:

  • 您的代码已损坏,请参阅for site in sites: 行。下面的行没有缩进。如果你清理它,它会更容易帮助你。
  • 我在不同的网站上使用了这个代码,设置相似,它可以工作。由于某些防刮机制(facepalm),它在此特定站点上不起作用。这里的教训是在所有不同的场景中尝试代码。无论如何希望代码可以帮助某人。

标签: python python-2.7 scrapy


【解决方案1】:

我觉得你这行有问题

if not not relative_next_page:

你有两个not那里

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多