Ошибка пользовательского агента при очистке веб-страниц python3

Я впервые использую веб-скрейпинг. Когда я использую page = requests.get(URL), он работает отлично, но когда я добавляю

headers = {"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15'}

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

я получаю сообщение об ошибке

    title = soup.find(id="productTitle").get_text()
AttributeError: 'NoneType' object has no attribute 'get_text'

Что случилось с этим? Должен ли я уйти в отставку с заголовками?


person Jakub Swistak    schedule 06.01.2020    source источник
comment
распечатайте page.content и проверьте, какой у него ответ   -  person Vikas Sharma    schedule 06.01.2020
comment
Это странно, потому что с заголовками и без них они разные, с заголовками выдается что-то вроде этой ссылки (это только часть выход)   -  person Jakub Swistak    schedule 06.01.2020
comment
@ jakub0301 Можете ли вы поделиться URL-адресом? Если я смотрю на вашу ссылку, я не вижу никаких тегов с id=productTitle   -  person Andrej Kesely    schedule 06.01.2020


Ответы (1)


Я думаю, что страница содержит недействительный HTML, и поэтому BeatifulSoup не может найти ваш элемент.

Попробуйте сначала украсить HTML:

import requests
from bs4 import BeautifulSoup

URL = 'https://www.amazon.com/dp/B07JP9QJ15/ref=dp_cerb_1'
headers = {
    "User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15'}
page = requests.get(URL, headers=headers)

pretty = BeautifulSoup(page.text,'html.parser').prettify()
soup = BeautifulSoup(pretty,'html.parser')
print(soup.find(id='productTitle').get_text())

Что возвращает:

Dell UltraSharp U2719D — светодиодный монитор — 27 дюймов

person Daan Klijn    schedule 06.01.2020