Почему find_next_sibling в bs4 работает с одной строкой кода, а не с другой, очень похожей строкой кода? - PullRequest
1 голос
/ 23 октября 2019

Я пишу простой веб-скребок для получения данных с веб-сайта Техасской комиссии по качеству окружающей среды (TCEQ). Информация, которая мне нужна, находится внутри тегов 'td'. Я очищаю соответствующий 'td', ссылаясь на предыдущий 'th', у которого у всех одинаковый текст, используемый для идентификации. Я использую find_next_sibling, чтобы очистить данные в переменную.

Вот мой код:

import requests
from bs4 import BeautifulSoup

URL = "https://www2.tceq.texas.gov/oce/eer/index.cfm?fuseaction=main.getDetails&target=323191"

r = requests.get(URL)

soup = BeautifulSoup(r.content, 'html.parser')

###This one works
report = soup.find("th", text="Incident Tracking Number:").find_next_sibling("td").text

###This one doesn't
owner = soup.find("th", text="Name of Owner or Operator:").find_next_sibling("td").text

Я получаю эту ошибку: AttributeError: У объекта 'NoneType' нет атрибута 'find_next_sibling'. Этот код имеет несколько строк, как две выше, и, подобно им, некоторые из них работают, а некоторые нет. Я посмотрел в HTML, чтобы увидеть, есть ли другой тег, но я не вижу его, если он есть. Пожалуйста и спасибо за любую помощь!

1 Ответ

1 голос
/ 23 октября 2019

При использовании параметра text вы должны точно указать текст. В вашем случае в конце есть пробел.

soup.find('th', text='Name of Owner or Operator: ').find_next_sibling('td').text

Это печатает:

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