Используя Python и Beautiful Soup, как захватить пустой тег - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь прочитать веб-данные в список. Проблема в том, что в данных есть пустые точки, которые мне нужно учитывать.

Например, для приведенных ниже данных я хочу, чтобы мой конечный вывод был таким как:

Плано, Техас
Нью-Йорк, Нью-Йорк
Денвер, CO
NA
Чикаго, Иллинойс
Сан-Франциско, Калифорния

<span itemprop="addressLocality">Plano, TX</span>
<span itemprop="addressLocality">New York, NY</span>
<span itemprop="addressLocality">Denver, CO</span>
<span itemprop="addressLocality"></span>
<span itemprop="addressLocality">Chicago, IL</span>
<span itemprop="addressLocality">San Francisco, CA</span>

В настоящее время я пытаюсь распечатать результаты, чтобы проверить их, прежде чем добавить их в список, мой код выглядит следующим образом:

for span in div.find('span', {'itemprop':'addressLocality'}):
    if span:
        print(span)
    else:
        print('NA')

Этот код дает мне следующий вывод, который не учитывает пустой тег:

Плано, Техас
Нью-Йорк, Нью-Йорк
Денвер, CO
Чикаго, Иллинойс
Сан-Франциско, Калифорния

Я только начал изучать Python и Beautiful Soup.
Я пробовал варианты if..else; попробуйте: ... кроме:; и .content. Я уверен, что это что-то простое.
Любые предложения будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Попробуйте использовать find_all, и если текста нет, заполните его "N / A"

spans = div.find_all('span', {'itemprop':'addressLocality'})
cities = [span.get_text() if span.get_text() else "N/A" for span in spans]
print cities

Если вы хотите придерживаться своей исходной структуры кода, вы очень близки, но попробуйте вместо этого:

for span in div.find_all('span', {'itemprop':'addressLocality'}):
    if span.get_text():
        print(span.get_text())
    else:
        print('NA')
0 голосов
/ 31 августа 2018

Вы должны использовать find_all, который возвращает все найденные теги. find возвращает только первый найденный.

if span: будет оцениваться до True. Вы хотите получить текст, содержащий get_text и проверить, не является ли он непустым.

Попробуйте это:

cities = []

for span in div.findAll('span', {'itemprop': 'addressLocality'}):
    text = span.get_text()
    if len(span) > 0:
        cities.append(text)

print(cities)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...