BeautifulSoup не работает во время просмотра веб-страниц Amazon - PullRequest
0 голосов
/ 09 мая 2019

Я новичок в изучении веб-страниц и пытаюсь использовать базовые навыки на Amazon.Я хочу создать код для поиска топ-10 «Самые выгодные предложения за сегодня» с ценами, рейтингом и другой информацией.

Каждый раз, когда я пытаюсь найти определенный тег с помощью find () и указанием класса, он постоянно говорит «Нет».».Однако фактический HTML имеет этот тег.При ручном сканировании я обнаружил, что половина кода не отображается в выходном терминале.Отображаемый код наполовину, но затем тело и тег HTML закрываются.Отсутствует огромный кусок кода в теге body.

Последняя отображаемая строка кода:

<!--[endif]---->

, затем тег body закрывается.

Вот кодчто я пытаюсь:

from bs4 import BeautifulSoup as bs
import requests

source = requests.get('https://www.amazon.in/gp/goldbox?ref_=nav_topnav_deals')
soup = bs(source.text, 'html.parser')

print(soup.prettify())
#On printing this it misses some portion of html

article = soup.find('div', class_ = 'a-row dealContainer dealTile')
print(article)
#On printing this it shows 'None'

В идеале, это должно дать мне код в теге div, чтобы я мог продолжить получать название продукта.Однако вывод просто показывает «Нет».И при печати всего кода без тегов в нем отсутствует огромный кусок html.

И, конечно, необходимая информация содержится в недостающем HTML-коде.

Блокирует ли Amazon мой запрос?Пожалуйста, помогите.

1 Ответ

1 голос
/ 09 мая 2019

Заголовок запроса User-Agent содержит характеристическую строку, которая позволяет одноранговым сетевым протоколам идентифицировать тип приложения, операционную систему, поставщика программного обеспечения или версию программного обеспечения запрашивающего программного агента пользователя. Проверка заголовка User-Agent на стороне сервера - обычная операция, поэтому обязательно используйте строку User-Agent в браузере, чтобы избежать блокировки.

(Источник: http://go -colly.org / article / scraping_related_http_headers / )

Единственное, что вам нужно сделать, это установить законного агента пользователя. Поэтому добавьте заголовки для эмуляции браузера. :

# This is a standard user-agent of Chrome browser running on Windows 10 
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } 

Пример:

from bs4 import BeautifulSoup
import requests 
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
resp = requests.get('https://www.amazon.com', headers=headers).text 
soup = BeautifulSoup(resp, 'html.parser') 
...
<your code here>

Кроме того, вы можете добавить еще один набор заголовков, чтобы выглядеть как законный браузер. Добавьте еще несколько заголовков, как это:

headers = { 
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 
'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
'Accept-Language' : 'en-US,en;q=0.5',
'Accept-Encoding' : 'gzip', 
'DNT' : '1', # Do Not Track Request Header 
'Connection' : 'close'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...