Эта страница нуждается в заголовке User-Agent
для распознавания браузером. Он может быть даже неполным Mozilla/5.0
, но requests
обычно отправляет python-requests/2.23.0
.
Без правильного заголовка этот сервер блокирует соединение, и через некоторое время вы можете получить сообщение с "timedout"
, потому что requests
не может дольше ждать данных с сервера.
BTW: BeautifulSoup
требуется source.text
или source.content
не source
(что является requests
объектом).
Рабочий код:
import requests
from bs4 import BeautifulSoup
url = 'https://www.usnews.com/best-colleges/rankings/national-universities'
headers = {'User-Agent': 'Mozilla/5.0'}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.content, 'lxml')
print(soup.prettify())
Кстати: Используя страницу https://httpbin.org/, вы можете проверить, что вы отправляете на сервер
import requests
r = requests.get('https://httpbin.org/get')
#r = requests.post('https://httpbin.org/post')
#r = requests.get('https://httpbin.org/ip')
#r = requests.get('https://httpbin.org/user-agent')
print( r.text )
#print( r.content )
#print( r.json() )
, вы также можете проверить (если вы используете url с /get
или /post
)
print( r.json()['headers']['User-Agent'] )
или вы можете проверить объект запросов
print( r.request.headers['User-Agent'] )
, и вы увидите User-Agent
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.23.0",
"X-Amzn-Trace-Id": "Root=1-5f07c942-067f5b72784a207b31e76ce4"
},
"origin": "83.23.22.221",
"url": "https://httpbin.org/get"
}
python-requests/2.23.0
python-requests/2.23.0