Beautifusoupl Вопрос об извлечении текста с помощью HTML - PullRequest
0 голосов
/ 28 октября 2019

У меня есть html-код:

<div class="_czm8crp">Joined in 2010<div class="_36rlri"></div></div>

Я хочу получить "Регистрация в 2010".

Я пишу код:

url = "https://www.airbnb.com/users/show/28845283"
r = requests.get(url)
html = r.text
soup = BeautifulSoup(html, 'lxml')

info = soup.find_all("div", attrs={"class": "_czm8crp"})
for item in info:
    print(item.text)

Однако, этоне показывает тот, который мне нужен, он показывает только другой без текста класса div "__36rlri". Может ли кто-нибудь помочь мне решить эту проблему? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Решено с использованием div-информации его родителя . Вот HTML-код:

<div style="margin-top:8px"><div class="_czm8crp">Joined in 2010<div class="_36rlri"></div></div></div>

Решение:

info = soup.find("div", attrs={"style": "margin-top:8px"})
print(info.text)

Результат:

Joined in 2010
0 голосов
/ 28 октября 2019

Ваш код работает нормально. Убедитесь, что вы указали HTML-код в переменной html.

Эта часть может быть добавлена ​​JavaScript, и вы можете увидеть ее в браузере, но не в необработанном ответе.

РЕДАКТИРОВАТЬ: Как и ожидалось, указанный вами URL не отправляет эту часть HTML без надлежащей подготовки. Прежде всего, вы должны передать заголовок с User-Agent в вашем запросе. Но даже после этого нужная вам информация находится не в html, а в скрипте, который является частью этого html.
Итак, я предлагаю вам использовать библиотеку re для такого вида извлечения.

Пример:

import requests
import re

url = "https://www.airbnb.com/users/show/28845283"
r = requests.get(url, headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36',
})
html = r.text
result = re.search(r'<div class="\S+?">(Joined in \d+?)<div', html)
print(result.group(1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...