Как убрать \ n из вывода при очистке веб-страницы? - PullRequest
0 голосов
/ 06 июня 2019

Я очищаю веб-страницу, и когда я получаю результаты, все выглядит хорошо, за исключением столбца с именем моей карты, потому что я получаю \n перед названием карты.Как я могу предотвратить вывод этого?

    # Scraping
    def parse(self, response):
        item = GameItem()

        item["Category"] = response.css("span.titletext::text").extract()
        for game in response.css("tr[class^=deckdbbody]"):
            item["card_name"] = game.css("a.card_popup::text").extract_first()
            if item["card_name"] != None:
                saved_name = item["card_name"]
            else:
                item["card_name"] = saved_name

            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()

            yield item

Пример вывода

{"Category": ["Duel Decks: Venser vs. Koth"], "card_name": "\nAether Membrane", "Condition": "NM/M", "stock": "93", "Price": "$0.59"},
{"Category": ["Duel Decks: Venser vs. Koth"], "card_name": "\nAether Membrane", "Condition": "PL", "stock": "59", "Price": "$0.49"},
{"Category": ["Duel Decks: Venser vs. Koth"], "card_name": "\nAngelic Shield", "Condition": "NM/M", "stock": "35", "Price": "$0.25"},
{"Category": ["Duel Decks: Venser vs. Koth"], "card_name": "\nAnger", "Condition": "NM/M", "stock": "9", "Price": "$1.49"},
{"Category": ["Duel Decks: Venser vs. Koth"], "card_name": "\nAnger", "Condition": "PL", "stock": "49", "Price": "$1.19"},

Ответы [ 2 ]

4 голосов
/ 06 июня 2019

встроенный строковый метод strip() (str.strip()) удаляет ни один печатный символ.

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

Это должно сделать это.

# Scraping
def parse(self, response):
    item = GameItem()

    item["Category"] = response.css("span.titletext::text").extract()
    for game in response.css("tr[class^=deckdbbody]"):
        item["card_name"] = game.css("a.card_popup::text").extract_first()

        # strip added here ->
        if item["card_name"] != None:
            saved_name = item["card_name"].strip()
        else:
            item["card_name"] = saved_name

        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()

        yield item

Один совет по упрощению кода, если можно:

# Scraping
def parse(self, response):
    item = GameItem()

    # declare saved_name before hand to avoid NameError
    saved_name = ""

    item["Category"] = response.css("span.titletext::text").extract()
    for game in response.css("tr[class^=deckdbbody]"):

        # simplify conditional statement

        saved_name = game.css("a.card_popup::text").extract_first() or saved_name
        item["card_name"] = saved_name.strip()

        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()

        yield item
...