Попытка получить название продукта из URL-адреса обзора Amazon

#python #web-scraping #beautifulsoup #amazon

#python #веб-очистка #beautifulsoup

Вопрос:

URL-адрес, который я использую: https://www.amazon.com/Marmot-womens-Precip-Lightweight-Waterproof/product-reviews/B086YML34N/ref=cm_cr_dp_d_show_all_btm?ie=UTF8amp;reviewerType=all_reviews

 product_name = soup.findall("h1",{"class":"a-size-large a-text-ellipsis"})
  

Я пытаюсь получить название продукта для всех обзоров на странице. Я пытался использовать приведенный выше код, но получаю ошибку «nonetype». Остальные мои атрибуты в моем коде работают. Я думаю, что я не выбираю правильный класс. У кого-нибудь был опыт очистки от Amazon, который мог бы дать несколько советов о том, что я делаю неправильно?

Ответ №1:

Вероятно, вы получили страницу с капчей. Попробуйте указать разные HTTP-заголовки (в моем случае User-Agent и Accept-Language ):

 import requests 
from bs4 import BeautifulSoup


url = 'https://www.amazon.com/Marmot-womens-Precip-Lightweight-Waterproof/product-reviews/B086YML34N/ref=cm_cr_dp_d_show_all_btm?ie=UTF8amp;reviewerType=all_reviews'
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0',
'Accept-Language': 'en-US,en;q=0.5'}

soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')
print(soup.select_one('h1.a-size-large.a-text-ellipsis').text)
  

С принтами:

 Marmot womens Precip Lightweight Waterproof Rain Jacket
  

Ответ №2:

Это findall потому, что в bs4 его нет. Это либо find_all или findAll (заглавная буква А).