AttributeError: у объекта 'str' нет ошибки атрибута 'Потомки' при использовании BeautifulSoup - PullRequest
0 голосов
/ 25 июня 2019

@ ayivima имеет отличный ответ, но я должен добавить, что сам сайт не был исправлен BeautifulSoup должным образом, поскольку у него была тонна Javascript.


Так что я совершенно новичок в использовании Python и просто пытаюсь напечатать заголовок веб-страницы. Я использую этот код в основном из Google:

from bs4 import BeautifulSoup, SoupStrainer
import requests

url = "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3210001601"
page = requests.get(url)
data = page.text
soup = BeautifulSoup
soup.find_all('h1')

print(text)

И я продолжаю получать ошибку:

AttributeError: 'str' object has no attribute 'descendants'

и я, честно говоря, действительно не имею понятия о том, что это значит, единственный другой ответ, который я могу найти, это: AttributeError: у объекта 'str' нет атрибута 'потомки' , который я надену не относится ко мне?

Что-то я делаю не так в коде? (Наверное, много, но я имею в виду в основном эту ошибку)

1 Ответ

1 голос
/ 25 июня 2019

BeautifulSoup требует, чтобы html-анализатор и html-текст передавались как атрибуты. Технически, вам нужно создать экземпляр BeautifulSoup. Если вы не передадите html-текст, искать будет нечего.

Таким образом, строка soup = BeautifulSoup должна выглядеть примерно так:

soup = BeautifulSoup(data, 'html.parser')

, где первый параметр, в данном случае data относится к необработанному html-тексту, а второй параметр - анализатор, html.parser. Я использую HTML-парсер Python по умолчанию, но Python поддерживает другие парсеры в стороне. Узнайте больше здесь: https://www.crummy.com/software/BeautifulSoup/bs4/doc/.

РЕКОМЕНДУЕМЫЙ КОД:

from bs4 import BeautifulSoup, SoupStrainer
import requests

url = "https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=3210001601"
page = requests.get(url)
data = page.text
soup = BeautifulSoup(data, 'html.parser')
text = soup.find_all('h1')

print(text)

Выход:

[]

Похоже, BeautifulSoup не нашел тега h1.

Поэкспериментируем с meta тегами:

meta_tags = soup.find_all('meta')
print(meta_tags)

Вывод:

[<meta content="no-cache" http-equiv="Pragma"/>, 
<meta content="-1" http-equiv="Expires"/>, 
<meta content="no-cache" http-equiv="CacheControl"/>]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...