Проблема с загрузкой мобильного сайта urllib2 - PullRequest
4 голосов
/ 19 мая 2011

Я пытаюсь получить некоторые данные из http://m.finnkino.fi/events/now_showing,, но в настоящий момент я терплю неудачу, потому что даже не могу загрузить исходный код страницы с помощью python. В данный момент я использую следующий код:

req = urllib2.urlopen(URL,None,2.5)
page = req.read()
print page

Вот трассировка для ошибки тайм-аута:

Traceback (most recent call last):
 File "user/src/finnkinoParser.py", line 26, in <module>
main()
File "user/src/finnkinoParser.py", line 13, in main
getNowPlayingMovies()
File "user/src/finnkinoParser.py", line 17, in getNowPlayingMovies
     req = urllib2.urlopen(baseURL,None,2.5)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 124, in urlopen
return _opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 383, in open
response = self._open(req, data)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 401, in _open
'_open', req)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 361, in _call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 1130, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 1105, in do_open
raise URLError(err)
urllib2.URLError: <urlopen error timed out>

Если я перехожу по URL с помощью браузера, он работает нормально. Так может кто-нибудь сказать мне, что делает этот сайт настолько отличным, что urllib2 не может загрузить страницу. Я полагаю, это как-то связано с тем, что сайт предназначен для мобильных пользователей. С "обычными" сайтами urllib2 работает нормально. Существуют ли какие-либо другие сайты, на которые не работает базовый urlopen (URL)?

Спасибо за помощь

1 Ответ

3 голосов
/ 19 мая 2011

Следующий фрагмент работает нормально.

import httplib
headers = {"User-Agent": "Mozilla/5.0"}
conn = httplib.HTTPConnection("m.finnkino.fi")
conn.request("GET", "/events/now_showing", "", headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
print data
conn.close()

Кажется, их сервер проверил несколько переменных запросов.После нескольких проверок можно сделать вывод:

  1. Протокол HTTP должен быть HTTP / 1.1.
  2. , если заголовки запроса имеют свойство Connection prop, его значение должно быть keep-alive.
  3. заголовки запроса должны иметь реквизит User-Agent независимо от его значения.

В то время как в urllib2 для свойства Connection в HTTPHandler по умолчанию установлено значение Close (L1127 в urllib2.py).Вы можете использовать urlgrabber или другой обработчик HTTP, который поддерживает HTTP / 1.1 и поддерживает работу.

...