Получить текст сразу после тега - PullRequest
2 голосов
/ 08 мая 2019

В настоящее время я работаю в Интернете, чтобы найти номера емкости для определенных мест.

Пробираюсь через резидентского советника и пытаюсь получить номер емкости, который отображается в html.

Я могу разобрать довольноблизко к нему, но я больше не вижу номер, который я ищу

import requests
import re
from bs4 import BeautifulSoup
import pandas as pd

page = requests.get('https://www.residentadvisor.net/club.aspx?id=4811', proxies={'http':'50.207.31.221:80'}).text  
soup = BeautifulSoup(page, 'lxml')

article = soup.find('ul', class_='clearfix')
for li in article.find_all('li'):
    for div in li.find_all('div'):
        print(div.text)

текущий вывод из кода

Address /

Capacity /
Phone /
On the internet /

это строка HTML

<li>
 <div>
  Capacity /
 </div>
 100
</li>

Я пытаюсь получить значение 100.Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 08 мая 2019

Разбираем вещи, в этом случае вы можете использовать одноуровневый тег тега div:

>>> from bs4 import BeautifulSoup
>>> html = """\
... <li>
...  <div>
...   Capacity /
...  </div>
...  100
... </li>
... """
>>> soup = BeautifulSoup(html, "lxml")
>>> tag = soup.find('li')
>>> tag.find('div').next_sibling.strip()
'100'

Здесь tag.find('div').next_sibling фактически создает экземпляр bs4.element.NavigableString, легкий подкласс str, которыйзнает о своем месте в дереве DOM, но имеет те же методы, что и str.

Как указывает @JackFleeting, эквивалентный маршрут будет tag.contents[2].strip().

0 голосов
/ 08 мая 2019
import requests
import re
from bs4 import BeautifulSoup
import pandas as pd


if __name__ == '__main__':
    page = requests.get('https://www.residentadvisor.net/club.aspx?id=4811', proxies={'http':'50.207.31.221:80'}).text
    soup = BeautifulSoup(page, 'lxml')

    article = soup.find('ul', class_='clearfix')
    for li in article.find_all('li'):
        # print(li.text) -> shows all of the li text
        print(li.contents[1]) # shows the 100 under capacity

Таким образом, причина того, что ваш код не идентифицирует 100 правильно, заключается в том, что вы вызываете div.text, который будет искать текст в компоненте div.Но на самом деле это второй ребенок тега li.Надеюсь, это поможет.

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