0

私は機械化を使用して、このサイトからニューヨークのメトロノース鉄道の価格を取得しようとしています: http://as0.mta.info/mnr/fares/choosestation.cfm

問題は、最初のオプションを選択すると、サイトが JavaScript を使用して目的地候補のリストを作成することです。Python で同等のコードを記述しましたが、すべてが機能していないようです。これが私がこれまでに持っているものです:

import mechanize
import cookielib
from bs4 import BeautifulSoup

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1)     Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

br.open("http://as0.mta.info/mnr/fares/choosestation.cfm")

br.select_form(name="form1")
br.form.set_all_readonly(False)

origin_control = br.form.find_control("orig_stat", type="select")
origin_control_list = origin_control.items
origin_control.value = [origin_control.items[0].name]

destination_control_list = reFillList(0, origin_control_list)

destination_control = br.form.find_control("dest_stat", type="select")
destination_control.items = destination_control_list
destination_control.value = [destination_control.items[0].name]

response = br.submit()
response_text = response.read()
print response_text

reFillList() メソッドのコードは長いので説明していませんが、mechanize.option オブジェクトのリストが正しく作成されると仮定します。Python は何も文句を言いませんが、送信すると、このアラートの html が表示されます。

「2 つの路線間の運賃情報は、オンラインでは入手できません。詳細については、511 のカスタマー インフォメーション センターに連絡し、担当者と話すように依頼してください。」

ここで何か不足していますか?助けてくれてありがとう!

4

1 に答える 1

0

その関数のクレイジーなロジックを理解しようとしないと、実際にはできません。js ソリューションまたはセレンのような完全なブラウザーをお勧めします。

于 2012-06-15T07:54:36.583 に答える