запросы python от usnews.com время ожидания другие веб-сайты работают нормально

#python #python-requests

Вопрос:

 url = "https://www.usnews.com"
page = requests.get(url, timeout = 5)
soup = BeautifulSoup(page.content,"html.parser")
 

requests от usnews.com не работает должным образом. Код выполняется вечно или истекает через пять секунд, как указано в инструкции. Я пробовал использовать другие веб-сайты, которые отлично работают (wikipedia.org, google.com).

Комментарии:

1. Сайт может быть заблокирован брандмауэром или по ряду других причин.

2. взгляните на robots.txt файл ( usnews.com/robots.txt ). в этом файле обычно описываются разрешения для доступа бота.

Ответ №1:

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

Вы можете User-Agent довольно легко установить свой собственный. Использование вашего веб-сайта в качестве примера:

 import requests
from bs4 import BeautifulSoup

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}

url = "https://www.usnews.com"
page = requests.get(url, headers=headers)
soup = BeautifulSoup(page.content,"html.parser")
 

Этот код сообщает веб-сайту, что мы являемся реальным человеком, а не ботом.

Вы можете узнать больше об агентах пользователей здесь (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent).

Ответ №2:

вы должны попробовать что-то вроде selenium этот код похож на selenium, но немного удобен для пользователя

 from requests_html import HTMLSession
import re
#from fake_useragent import UserAgent
#create the session
#ua = UserAgent()
session = HTMLSession()

#define our URL
url = "https://www.usnews.com"

#use the session to get the data
r = session.get(url)

#Render the page, up the number on scrolldown to page down multiple times on a page
r.html.render(sleep=1,timeout = 30, keep_page=True, scrolldown=1)

print(r.text)

 

этот код имитирует реальную поисковую систему и должен обходить обнаружение бота