Очистите сайт, используя шрифт или цвета в Scrapy - PullRequest
0 голосов
/ 07 июня 2019

Мне нужно соскрести цены с веб-сайта, и я столкнулся с проблемой, когда определенные цены перечеркнуты, а новая цена показана красными / жирными буквами, а html-код отличается для этого кода, поэтому я получаю нулевое значение для моегоцена.Поэтому я решил сделать оператор if, чтобы получить правильные данные, но единственная проблема в том, что перечеркнутая цена имеет тот же идентификатор, поэтому я получаю эту цену вместо красной.Так есть ли способ в Scrapy , чтобы соскрести цену, которая мне нужна, исходя из красного цвета или жирного шрифта?Если нет, то есть ли другой способ получить правильную цену?

Partial HTML code for price, need the second price, 13.49

 for game in response.css("tr[class^=deckdbbody]"):

            # Initialize saved_name to the extracted card name
            saved_name  = game.css("a.card_popup::text").extract_first() or saved_name
            # Now call item and set equal to saved_name and strip leading '\n' from output
            item["Card_Name"] = saved_name.strip()
            # Check to see if output is null, in the case that there are two different conditions for one card
            if item["Card_Name"] != None:
                # If not null than store value in saved_name
                saved_name = item["Card_Name"].strip()
            # If null then set null value to previous card name since if there is a null value you should have the same card name twice
            else:
                item["Card_Name"] = saved_name
            # Call item again in order to extract the condition, stock, and price using the corresponding html code from the website
            item["Condition"] = game.css("td[class^=deckdbbody].search_results_7 a::text").get()
            item["Stock"] = game.css("td[class^=deckdbbody].search_results_8::text").extract_first()
            item["Price"] = game.css("td[class^=deckdbbody].search_results_9::text").extract_first()
            if item["Price"] == None:
                item["Price"] = game.css("td[class^=deckdbbody].search_results_9 span::text").get()

            # Return values
            yield item

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Вам нужно настроить выражение:

if item["Price"] == None:
    item["Price"] = game.css("td[class^=deckdbbody].search_results_9 span[style*='color:red']::text").get()
1 голос
/ 07 июня 2019

Вы можете отфильтровать его, используя атрибут стиля

response.css('span[style^="color:red;"]::text').get()
...