Python Экстракт строки между </div> и </td> - PullRequest
0 голосов
/ 23 апреля 2020

Я очищаю веб-сайт, используя python и BeautifulSoup. Я смог найти все тдс на странице с помощью команды:

data = soup.find_all('td')

Затем я нашел первый индивидуальный тд, который мне нужно использовать:

td = data[19]

Если я распечатал это td вывод:

<td data-geoid="0617568" data-isnumeric="1" data-srcnote="true" data-value="18.8">
<span data-title="Culver City city, California"></span><div class="qf-sourcenote">
<span></span><a title="Source: 2018 American Community Survey (ACS), 5-year estimates. Estimates are not comparable to other geographic levels due to methodology differences that may exist between different data sources."></a>
</div>18.8%</td>

Теперь я хочу извлечь данные, которые находятся между концом div и концом td, так что 18.8%. Я использовал этот post , чтобы попытаться извлечь его с помощью следующего кода:

m = re.search('</div>(.+?)</td>', td)

Это дает мне следующую ошибку:

Traceback (most recent call last):
  File "/Users/Alfie/PycharmProjects/474scrape/srape.py", line 18, in <module>
    m = re.search('</div>(.+?)</td>', td)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/re.py", line 183, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or bytes-like object

Я думаю, что проблема с escape-символами или чем-то подобным, которые находятся в маркерах, которые я использую. Любая помощь приветствуется

Ответы [ 2 ]

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

Попробуйте передать шаблон в виде необработанной строки.

m = re.search(r'</div>(.+?)</td>', td)

Если это не сработает, проверьте тип td и, если это не строка, преобразуйте его в строку и затем передайте функции.

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

td, вероятно, не относится к типу str.

Если td относится к типу str, код должен нормально работать.

import re

td = """
<td data-geoid="0617568" data-isnumeric="1" data-srcnote="true" data-value="18.8">
<span data-title="Culver City city, California"></span><div class="qf-sourcenote">
<span></span><a title="Source: 2018 American Community Survey (ACS), 5-year estimates. Estimates are not comparable to other geographic levels due to methodology differences that may exist between different data sources."></a>
</div>18.8%</td>
"""

m = re.search(r'</div>(.+?)</td>', td)
print(m.group(1))
# 18.8%

Попробуйте заменить

m = re.search(r'</div>(.+?)</td>', td)

с

m = re.search(r'</div>(.+?)</td>', str(td))
...