Beautifulsoup.find () не дает необходимого c необходимого результата - PullRequest
1 голос
/ 10 апреля 2020

У меня есть этот код ниже, и я пытаюсь получить 'Oswestry, England' .

label = soup.findall('span',{'class':"ProfileHeaderCard-locationText"})
print(label)

Но это не дает мне значения.

Вот как выглядит код HMTL

<span class="ProfileHeaderCard-locationText u-dir" dir="ltr">
     <a data-place-id="5b756a1991aa8648" href="/search?q=place%3A5b756a1991aa8648">Oswestry, England</a>
     </span>

Когда я печатаю этикетку, в результате получается код HTML, который я разместил выше. Вот мой полный код:

import requests as req
from bs4 import BeautifulSoup

usernames = #list of username

location_list = []

for x in usernames:
    url= "https://twitter.com/" + x
    try:
        html = req.get(url)
    except Exception as e:
        print("Failed to")
        continue
    soup = BeautifulSoup(html.text,'html.parser')
    try:
        label = soup.find('span',{'class':"ProfileHeaderCard-locationText"})
        label_formatted = label.string.lstrip()
        label_formatted = label_formatted.rstrip()
        if label_formatted != "":
            location_list.append(label_formatted)
            print(x + ' : ' + label_formatted) 
        else:
            print('Not found')
    except:
        print('Not found')

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

Вы должны позвонить find, а не find_all, чтобы получить один элемент. Затем используйте атрибут .text, чтобы получить текстовое содержимое.

label = soup.find('span',{'class':"ProfileHeaderCard-locationText"})
print(label.text)
0 голосов
/ 10 апреля 2020

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

label2 = soup.findAll('span',{"class":"ProfileHeaderCard-locationText"})[0].get_text ()

0 голосов
/ 10 апреля 2020

Похоже, вы искали тег span с атрибутом class, точно совпадающим с вашим классом запроса. Поскольку диапазон имеет два класса, ваш тест не пройден и результаты не возвращены.

Используя css селекторы , вы можете попробовать свое решение следующим образом:

from bs4 import BeautifulSoup as BS
soup = BS('''<span class="ProfileHeaderCard-locationText u-dir">.....</span>''', 'html.parser')
soup.select('span.ProfileHeaderCard-locationText')

возвращает теги span, содержащие ваш предписанный класс.

см. Также

...