1

電車の切符を検索するための Python スクリプトを作成しています。私の最初のステップは、https://venta.renfe.com/vol/inicioCompra.doでチケットを検索することでした。

機械化を試みましたが、次のようになります。

RuntimeError: maximum recursion depth exceeded while calling a Python object

URLを開くとすぐに、おそらくそのWebサイトの形式が悪いためです。

したがって、次の試みは Python Requests ライブラリを使用し、firebug で確認できるのと同じ要求ヘッダーを使用することでした。したがって、私のコードは次のようになります。

import requests

headers = {'Cache-Control': 'max-age=0',
           'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
           'Accept-Encoding': 'gzip,deflate,sdch',
           'Accept-Language': 'es,en-GB;q=0.8,en;q=0.6',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36',
           'Content-Length': '118',
           'Content-Type': 'application/x-www-form-urlencoded',
           'Connection': 'keep-alive',
           'Host': 'venta.renfe.com'}

cookies = {'target': '_self',
           'pagina': '/vol/index.do',
           'mensajeErrorSesion': 'null (null-U014)',
           'url_logout': '/vol/index.do',
           'tipoUsuario': 'N',
           'JSESSIONID': '0000W1mXLh9qNdE6l-qaEExFc9Y:15df38flv',
           'org.springframework.web.servlet.i18n.CookieLocaleResolver.LOCALE': 'es_ES',
           's_cc': 'true',
           's_fid': '5C053C8CEF00A17B-2B7E62472A63CF66',
           's_nr': '1377790666229-New',
           'gpv_p6': 'Venta%3APagina%20Principal',
           's_sq': 'renfeprod%3D%2526pid%253DVenta%25253APagina%252520Principal%2526pidt%253D1%2526oid%253Djavascript%25253AestacionesAccesibles%252528%252529%25253B%2526ot%253DA Host:venta.renfe.com Origin:https://venta.renfe.com Referer:https://venta.renfe.com/vol/inicioCompra.do'}

payload = {'IdOrigen': 'Madrid (*)',
           'IdDestino': 'Oviedo',
           'FechaIdaSel': '15/11/2013',
           'FechaVueltaSel': '17/11/2013'}

r = requests.post('https://venta.renfe.com/vol/inicioCompra.do', data=payload, cookies=cookies, headers=headers)
print r

しかし、その後、501 HTML コード エラーが表示されます:実装されていません。おそらく Cookie 情報が不足していると思いますが、その Cookie 情報をどこで入手できるのか、または他に何か不足しているのかどうかわかりません。

何か案が?

4

1 に答える 1

1

サイトを調べたところ、実際に必要なのは POST であるのに、GET HTTP メソッドを使用してデータを取得しているようです。

通常、HTTP 501 は、クライアントが要求内で送信した HTTP 動詞を Web サーバーが理解できない場合に、クライアントへの応答として送信されます。

コードを変更してみてください:

r = requests.get('https://venta.renfe.com/vol/inicioCompra.do', data=payload, cookies=cookies, headers=headers)

のようなものに

r = requests.post('https://venta.renfe.com/vol/inicioCompra.do', data=payload, cookies=cookies, headers=headers)

注:リクエストを使用したことがないため、関数呼び出しパラメーターを再確認することをお勧めします。クイック リファレンスについては、このリンクを参照してください。

これが役に立てば幸いです-これは、Chrome で表示されるヘッダーのダンプです。ヘッダー内に Content-Type、Content-Length パラメータがないことに注意してください。クッキーの内容にも注意してください。

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Cache-Control:max-age=0 
Connection:keep-alive Content-Length:118 
Content-Type:application/x-www-form-urlencoded 

Cookie:target=_self; pagina=/vol/index.do; mensajeErrorSesion=null (null-U014); url_logout=/vol/index.do; tipoUsuario=N; JSESSIONID=0000W1mXLh9qNdE6l-qaEExFc9Y:15df38flv; org.springframework.web.servlet.i18n.CookieLocaleResolver.LOCALE=es_ES; s_cc=true; s_fid=5C053C8CEF00A17B-2B7E62472A63CF66; s_nr=1377790666229-New; gpv_p6=Venta%3APagina%20Principal; s_sq=renfeprod%3D%2526pid%253DVenta%25253APagina%252520Principal%2526pidt%253D1%2526oid%253Djavascript%25253AestacionesAccesibles%252528%252529%25253B%2526ot%253DA Host:venta.renfe.com Origin:https://venta.renfe.com Referer:https://venta.renfe.com/vol/inicioCompra.do 
    User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
于 2013-08-29T15:45:00.780 に答える