Не все данные в выводе Scrapy - PullRequest
0 голосов
/ 23 июня 2019

Попытка очистить следующий веб-сайт, https://www.trollandtoad.com/magic-the-gathering/aether-revolt/10066,, и он идеально очищает почти все данные, но в определенных ситуациях, когда есть много продавцов для конкретной карты, и это кнопка, которая говорит, что посмотреть больше она не получит всецены для разных продавцов, хотя все необходимые данные содержатся в html-коде, нажимаю ли я на просмотр больше или нет.Например, на рисунках ниже вы увидите карту до и после нажатия кнопки «Просмотреть больше», и она очистит 7 из 8 карт, единственная, которая не очищает, - это карта Evo Merchant для 7.99, та, которая появляется сразу послеЯ нажимаю на кнопку «Просмотреть больше», но две нижние, «Райские игры» для 2.98 и «Эво мерчант» для 6.99, просто отменяются, поэтому я не знаю, что происходит.

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 Ответ

2 голосов
/ 25 июня 2019

Я думаю, что ваша проблема заключается в вашем селекторе CSS, в частности, в части :not(:first-child).

Я не внимательно изучил HTML, но, по-видимому, первый элемент после ссылки "Просмотреть больше"также считается первым ребенком.Поэтому я хотел бы рассмотреть этот заголовок таблицы другим способом:

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