【问题标题】:Scrapy returns same piece of information 80+ timesScrapy 返回同一条信息 80 多次
【发布时间】:2014-03-25 16:48:08
【问题描述】:

scrapy 和 python 新手,在这里遇到问题。

我正在尝试从 Metacritic 获取整个 PS3 游戏列表。这是我的代码:

class MetacriticSpider(BaseSpider):
name = "metacritic"
allowed_domains = ["metacritic.com"]
max_id = 10
start_urls = [
    "http://www.metacritic.com/browse/games/title/ps3?page="
    #"http://www.metacritic.com/browse/games/title/xbox360?page=0"
]

def start_requests(self):
    for c in lowercase:
        for i in range(self.max_id):
            yield Request('http://www.metacritic.com/browse/games/title/ps3/{0}?page={1}'.format(c, i), callback = self.parse)

def parse(self, response):
    sel = Selector(response)
    sites = sel.xpath('//div[@class="product_wrap"]/div')
    items = []

    for site in sites:
        #item = MetacriticItem()
        #titles = site.xpath('a/text()').extract()
        titles = site.xpath('//div[contains(@class, "basic_stat product_title")]/a/text()').extract()
        #cscore = site.xpath('//div[contains(@class, "basic_stat product_score brief_metascore")]/div[1]/text()').extract()
        if titles:
            item = MetacriticItem()
            item['title'] = titles[0].strip()       

            items.append(item)
    return items

由于某种原因,当我检查 JSON 文件时,我有每个标题的 81 个实例,并且它开始于 刺客信条:启示录 - 祖先角色包

它应该从标题编号的第一页开始,然后前进到 A 列表,并检查其中的每一页等。 关于为什么这样做的任何想法,我看不出我的问题是什么

【问题讨论】:

    标签: python windows web-scraping scrapy


    【解决方案1】:

    您的 xpath 应该与每个 site 相对 (.//):

    titles = site.xpath('.//div[contains(@class, "basic_stat product_title")]/a/text()').extract()
    

    另外,将sites selection xpath 更改为(注意,末尾没有div):

    //div[@class="product_wrap"]
    

    【讨论】:

    • “相关”->“相对”?
    • @alecxe 谢谢你的工作。但是,我仍然不确定为什么它不能正确浏览页面。它仍然从刺客信条开始,并从所有内容的第 2 页开始。有任何想法吗?我希望它从编号页开始并从那里开始
    • @AndyOHart 好吧,正如我所见:您仍然可以从所有页面获取所需的所有数据。但是由于scrapy的异步特性,不能保证顺序。见stackoverflow.com/questions/16875580/…
    • 你说得对,我只是没有按顺序获得所有内容,但我没有获得此页面上的编号内容:metacritic.com/browse/games/title/ps3?view=condensed
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 2018-03-08
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2019-07-21
    相关资源
    最近更新 更多