Снова urllib.ошибка.HTTPError: ошибка HTTP 400: неверный запрос
Hy! Я попытался открыть веб-страницу, которая обычно открывается в браузере, но python просто ругается и не хочет работать.
import urllib.request, urllib.error
f = urllib.request.urlopen('http://www.booking.com/reviewlist.html?cc1=tr;pagename=sapphire')
и другим способом
import urllib.request, urllib.error
opener=urllib.request.build_opener()
f=opener.open('http://www.booking.com/reviewlist.html?cc1=tr;pagename=sapphi
re')
оба варианта дают один тип ошибки:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Python34liburllibrequest.py", line 461, in open
response = meth(req, response)
File "C:Python34liburllibrequest.py", line 571, in http_response
'http', request, response, code, msg, hdrs)
File "C:Python34liburllibrequest.py", line 493, in error
result = self._call_chain(*args)
File "C:Python34liburllibrequest.py", line 433, in _call_chain
result = func(*args)
File "C:Python34liburllibrequest.py", line 676, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "C:Python34liburllibrequest.py", line 461, in open
response = meth(req, response)
File "C:Python34liburllibrequest.py", line 571, in http_response
'http', request, response, code, msg, hdrs)
File "C:Python34liburllibrequest.py", line 499, in error
return self._call_chain(*args)
File "C:Python34liburllibrequest.py", line 433, in _call_chain
result = func(*args)
File "C:Python34liburllibrequest.py", line 579, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request
какие идеи?
2 ответов
этот URL-адрес, похоже, выполняет проверку строки агента пользователя. Если я настрою строку агента пользователя в Firefox на Python-urllib/2.7
, он выдает Bad Request
вы видите.
как вы используете urllib
, вы можете настроить агент пользователя после этого учебник
from urllib.request import FancyURLopener
class MyOpener(FancyURLopener):
version = 'My new User-Agent' # Set this to a string you want for your user agent
myopener = MyOpener()
page = myopener.open('http://www.booking.com/reviewlist.html?cc1=tr;pagename=sapphire')
они, вероятно, блокируют тот факт, что он не исходит из браузера. Вероятно, вам нужен допустимый заголовок User-Agent или что-то еще.
используя запросы, это работает:
import requests
headers =
{
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36'
}
r = requests.get('http://www.booking.com/reviewlist.html?cc1=tr;pagename=sapphire', headers=headers)
print r
print r.headers