Можно ли получить пустую строку в списке при отсутствии элемента, используя селектор CSS? - PullRequest
0 голосов
/ 30 октября 2019

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

<div class="container" id="1">
    <span class="title">
        product-title1
    </span>
    <div class="description">
        product-desc
    </div>
    <div class="price">
        1.0
    </div>
</div>

Мне нужно извлечь имя, описание и цену.

К сожалению, иногда продукт не имеет описания, а HTML выглядит следующим образом:

<div class="container" id="2">
    <span class="title">
        product-title2
    </span>
    <div class="price">
        2.0
    </div>
</div>

В настоящее время я использую селекторы CSS, которые возвращают список всех элементов, существующих на сайте:

title = response.css('span[class="title"]').extract()

['product-title1', 'product-title2 ',' product-title3 ']

description = response.css('div[class="description"]').extract()

[' desc1 ',' desc3 ']

price = response.css('div[class="price"]').extract()

['1.0', '2.0', '3.0']

Можно ли получить, например, пустую строку вместо отсутствующего 'desc2', когдаОписание объекта не существует, используя селектор CSS?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Рекомендую переписать код:

for section in response.xpath('//div[@class="container"]'):
    title = section.xpath('./span[@class="title"]/text()').get(default='not-found') # you can use any default value here or just empty string
    desctiption = section.xpath('./div[@class="description"]').get()
    price = section.xpath('./div[@class="price"]/text()').get()
0 голосов
/ 31 октября 2019

Проверьте это ..

for section in response.xpath('//div[@class="container"]'):
    title = section.xpath('./span[@class="title"]/text()').get()
    desctiption_tag = section.xpath("//div[contains(@class,'description')]")
    if desctiption_tag:
        desctiption = section.xpath('./div[@class="description"]').get()
    else:
        desctiption = "String"
    price = section.xpath('./div[@class="price"]/text()').get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...