并非所有数据都在输出中Scrapy

时间:2019-06-23 14:49:39

标签: python web-scraping scrapy scrapy-splash

尝试抓取以下网站https://www.trollandtoad.com/magic-the-gathering/aether-revolt/10066,它会完美抓取几乎所有数据,但在某些情况下,某张卡的卖家很多,而他们的按钮表示查看更多信息将无法获得全部信息不管我是否单击“查看”,即使所有必需的数据都在html代码中,不同卖方的价格也是如此。例如,在下面的图片中,您将在单击“查看更多”按钮之前和之后看到该卡片,它将刮擦8张卡片中的7张,唯一一张不会刮擦的是7.99的Evo商户卡片,紧随其后出现的一张我单击查看更多,但位于其下方的两个(用于2.98的天堂游戏和用于6.99的Evo商人)被很好地废弃了,所以我不知道发生了什么。

def parse(self, response):
        for game in response.css('div.card > div.row'):
            item = GameItem()
            item["Card_Name"]  = game.css("a.card-text::text").get()
            for buying_option in game.css('div.buying-options-table div.row:not(:first-child)'):
                item["Condition"] = buying_option.css("div.col-3.text-center.p-1::text").get()
                item["Price"] = buying_option.css("div.col-2.text-center.p-1::text").get()
                yield item

Screenshot of website Screenshot of website

1 个答案:

答案 0 :(得分:2)

我认为您的问题出在CSS选择器上,尤其是:not(:first-child)部分。

我没有仔细研究HTML,但是显然“查看更多”链接之后的第一项也被视为第一个孩子。所以我会考虑以其他方式删除该表头:

for buying_option in game.css('div.buying-options-table div.row')[1:]: