веб-выскабливание с помощью Python и beautifulsoup 3.6 - получение неверный URL-адрес
Я хочу работать с этой страницей на Python: http://www.sothebys.com/en/search-results.html?keyword=degas%27
Вот мой код:
from bs4 import BeautifulSoup
import requests
page = requests.get('http://www.sothebys.com/en/search-results.html?keyword=degas%27')
soup = BeautifulSoup(page.content, "lxml")
print(soup)
Я получаю следующий вывод:
<html><head>
<title>Invalid URL</title>
</head><body>
<h1>Invalid URL</h1>
The requested URL "[no URL]", is invalid.<p>
Reference #9.8f4f1502.1494363829.5fae0e0e
</p></body></html>
Я могу открыть страницу с помощью браузера с той же машины и не получить никакого сообщения об ошибке. Когда я использую тот же код с другим URL-адресом, извлекается правильное содержимое HTML:
from bs4 import BeautifulSoup
import requests
page = requests.get('http://www.christies.com/lotfinder/searchresults.aspx?&searchtype=p&action=search&searchFrom=header&lid=1&entry=degas')
soup = BeautifulSoup(page.content, "lxml")
print(soup)
Я также протестировал другие URL-адреса (reddit, google, сайты электронной коммерции) и не обнаружил никаких проблем. Таким образом, один и тот же код работает с одним URL-адресом, а с другим-нет. В чем же проблема?
2 ответа:
Этот сайт блокирует запросы, не поступающие из любого браузера, таким образом, вы получаете ошибку
Invalid URL
. Добавление пользовательских заголовков к запросу работает нормально.import requests from bs4 import BeautifulSoup ua = {"User-Agent":"Mozilla/5.0"} url = "http://www.sothebys.com/en/search-results.html?keyword=degas%27" page = requests.get(url, headers=ua) soup = BeautifulSoup(page.text, "lxml") print(soup)