Два почти идентичных кода, один работает, а другой нет - PullRequest
0 голосов
/ 15 марта 2020

Я не знаю, почему первый код работает, а второй нет. После кода «adidas» я получаю ответы «соединение прервано, OSError 10054». Я слышал кое-что об API на веб-сайтах, если честно, я не знаю, что это такое, но я упал вот так: D

ЭТО РАБОТАЕТ:

import requests
from bs4 import BeautifulSoup

odpowiedz = requests.get("https://www.nike.com/pl/w?q=react%20270&vst=react%20270")
soup = BeautifulSoup(odpowiedz.text, 'html.parser')

ЭТО НЕ РАБОТАЕТ:

import requests
from bs4 import BeautifulSoup

odpowiedz = requests.get("https://www.adidas.pl/search?q=ultraboost")
soup = BeautifulSoup(odpowiedz.text, 'html.parser')

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Daweo правильно, сервер Adidas проверяет заголовок User-Agent.

Это работает для меня:

import requests
from bs4 import BeautifulSoup

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0",
           #"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
           #"Accept-Language": "en-US,en;q=0.5",
           }

odpowiedz = requests.get("https://www.adidas.pl/search?q=ultraboost", headers=headers)
soup = BeautifulSoup(odpowiedz.text, 'html.parser')

Он даже принимает "aaaaaaaaaaaaaadaaaMozilla".

Для Adidas.com, если у вас нет приемлемого User-Agent, он возвращает страницу, объясняющую, почему:

Во время релизов продуктов с высоким трафиком c мы имеем дополнительная защита для предотвращения попадания ботов на наш сайт. Мы делаем это, чтобы защитить клиентов и дать всем шанс получить кроссовки. Что-то в вашей настройке должно было вызвать срабатывание нашей системы безопасности, поэтому мы не можем позволить вам зайти на сайт.

0 голосов
/ 15 марта 2020

Вы можете использовать селен вместо запросов для получения источника страницы

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome()
driver.get("https://www.adidas.pl/search?q=ultraboost")
source = driver.page_source

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

Если вы хотите выйти из chrome после получения источника страницы, используйте driver.quit ()

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome()
driver.get("https://www.adidas.pl/search?q=ultraboost")
source = driver.page_source
driver.quit()

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

Если вы не хотите, чтобы вкладка chrome появлялась

from selenium import webdriver
from bs4 import BeautifulSoup

options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get("https://www.adidas.pl/search?q=ultraboost")
source = driver.page_source
driver.quit()

soup = BeautifulSoup(source, 'html.parser')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...