我必须从this site获取前美国州长的所有信息。但是,要读出结果然后按照链接,我需要访问不同的结果页面,或者,最好只是将每页显示的结果限制设置为最大值100(我不认为有超过100个)每个州的结果)。但是,页面信息似乎使用javascript,不是表单的一部分,似乎我无法将其作为控件访问。
有关如何进行的任何信息?我是python的新手,只是不时用它来做这样的任务。这是一些简单的代码,它遍历主窗体。
import mechanize
import lxml.html
import csv
site = "http://www.nga.org/cms/FormerGovBios"
output = csv.writer(open(r'output.csv','wb'))
br = mechanize.Browser()
response = br.open(site)
br.select_form(name="governorsSearchForm")
states = br.find_control(id="states-field", type="select").items
for pos, item in enumerate(states[1:2]):
statename = str([label.text for label in item.get_labels()])
print pos, item.name, statename, len(states)
br.select_form(name="governorsSearchForm")
br["state"] = [item.name]
response = br.submit(name="submit", type="submit")
# now set page limit to 100, get links and descriptions\
# and follow each link to get information
for form in br.forms():
print "Form name:", form.name
print form, "\n"
for link in br.links():
print link.text, link.url
答案 0 :(得分:2)
我用硒解决了这个问题。它是完整的firefox(或其他)浏览器,您可以在代码中进行操作。
答案 1 :(得分:1)
您可以使用PySide绑定QtWebKit。使用QtWebKit,您可以检索使用Javascript的页面,并在Javascript填充html后解析它。所以你不需要了解Javascript。其他选择包括Selenium和PhantomJS。
答案 2 :(得分:0)
我会用phantomjs http://phantomjs.org/(javascript)看到https://github.com/ariya/phantomjs/wiki/Page-Automation
答案 3 :(得分:0)
请注意,该页面上的select
元素会更改window.location
。
我认为只需将$('#pageSizeSelector....-..-..-..-....').val()
替换为您需要的值,即可构建适当的URI来加载页面。
答案 4 :(得分:0)
好的,这是一个搞乱的方法。使用不同的搜索设置,我发现要显示的结果数量在网址中。因此我将其更改为每页3000个,因此它只适用于1页。
在它需要一段时间的lodes之后我会右键单击并转到查看页面源。将其复制到我的计算机上的文本文件中。然后我可以从文件中删除我需要的信息,而无需去服务器并且必须处理javascript。
我可以推荐"BeautifulSoup"来浏览html文件。