AttributeError: у объекта 'NoneType' нет атрибута 'get_text' python web-scraping - PullRequest
0 голосов
/ 09 февраля 2020

Я следую этому уроку, и я получил эту ошибку, хотя я все сделал правильно. Это ссылка на учебник https://www.youtube.com/watch?v=Bg9r_yLk7VY&t=241s, и это мой код ниже

import requests
from bs4 import BeautifulSoup

URL = 'https://www.amazon.com/-/de/dp/B07RF1XD36/ref=lp_16225007011_1_6?s=computers-intl-ship&ie=UTF8&qid=1581249551&sr=1-6'

headers ={"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}

page = requests.get(URL, headers=headers)

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

title = soup.find(id="productTitle").get_text()

print(title.strip())

Это сообщение об ошибке, которое я получаю, когда запускаю код

Traceback (most recent call last):
  File "scraper.py", line 26, in <module>
    title = soup.find(id="productTitle").get_text()
AttributeError: 'NoneType' object has no attribute 'get_text'

1 Ответ

3 голосов
/ 09 февраля 2020

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

Рабочий код:

import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent

ua = UserAgent()

URL = 'https://www.amazon.com/-/de/dp/B07RF1XD36/ref=lp_16225007011_1_6?s=computers-intl-ship&ie=UTF8&qid=1581249551&sr=1-6'

page = requests.get(URL, headers={'User-Agent':ua.random})
soup = BeautifulSoup(page.text, 'html5lib')
title = soup.find(id="productTitle").get_text(strip=True)
print(title)
...