新的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列表,并检查每个页面等等任何想法,为什么这样做,我不明白我的问题是什么
你的xpath应该是相对的( .//
)到每个site
:
titles = site.xpath('.//div[contains(@class, "basic_stat product_title")]/a/text()').extract()
另外,将sites
选择xpath更改为(注意,最后没有div
):
//div[@class="product_wrap"]