mechanicalsoup - 如何输入单个文本框

时间:2017-11-15 18:31:29

标签: python mechanicalsoup

我正在尝试解析的网站只有一个没有表单的输入框。我只是定义单个输入框,传递一个地址然后提交。

我想要做的是输入地址,提交,抓取id="A18" title="Click to get bulk trash pick up info"下的信息并加载到JSON中。

的Python:

import mechanicalsoup

# URL that we authenticate against
map_url = "http://mapservices.phoenix.gov/gis/imap/iMap.html"
address = "<address>"
json_file = "/home/pi/bulk_pickup.json"

# Setup browser
browser = mechanicalsoup.StatefulBrowser(
    soup_config={'features': 'lxml'},
    user_agent='Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13',
)

# Open the login URL
map_page = browser.get(map_url)

# Similar to assert login_page.ok but with full status code in case of failure.
map_page.raise_for_status()

search_form = mechanicalsoup.Form(map_page.soup.select_one('input[id="search_input"]'))

search_form.input({'search_input': address})

1 个答案:

答案 0 :(得分:2)

不幸的是,页面http://mapservices.phoenix.gov/gis/imap/iMap.html似乎大量使用JavaScript。您看到的<input ...>标记甚至不是<form>的一部分,而MechanicalSoup需要表单的action=属性才能知道提交的位置。要么你自己需要破解低级别的东西(但与使用裸request库相比,MechanicalSoup会非常有用),或者你需要更高级的解决方案像Selenium。

有关详细信息,请参阅http://mechanicalsoup.readthedocs.io/en/stable/faq.html#when-to-use-mechanicalsoup

页面是否更多&#34; HTMLy&#34;更少&#34; JavaScripty&#34;,你可以写

browser.open(map_url)
browser.select_form(...)
browser["search_input"] = ...
browser.submit_selected()