2013-06-13 130 views
2

我必须从this site刮去前美国州长的所有信息。但是,要读出结果并按照链接进行操作,我需要访问不同的结果页面,或者,最好将每页显示的结果限制设置为最大值100(我认为不超过100每个州的结果)。然而,页面信息似乎使用JavaScript,不是一个窗体的一部分,它似乎我不能作为一个控件访问它。Python刮板机械化/ 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 
+1

将页面大小更改为2500并保存HTML,然后根据需要解析保存的HTML。 – EPQRS

回答

0

好吧,这是一个螺旋球的方法。使用不同的搜索设置进行游戏时,我发现要显示的结果数在url中。所以我将它改为每页3000个,因此它全部适合1页。

http://www.nga.org/cms/FormerGovBios?begincac77e09-db17-41cb-9de0-687b843338d0=0&higherOfficesServed=&lastName=&sex=Any&honors=&submit=Search&state=Any&college=&party=&inOffice=Any&biography=&race=Any&birthState=Any&religion=&militaryService=&firstName=&nbrterms=Any&warsServed=&&pagesizecac77e09-db17-41cb-9de0-687b843338d0=3000

后,它矿脉这确实需要一段时间,我会点击鼠标右键,去浏览网页源文件。将其复制到我电脑上的文本文件中。然后,我可以从文件中删除所需的信息,而无需转到服务器并处理JavaScript。

我可以推荐"BeautifulSoup"来浏览html文件。

+0

不知何故,我错过了这个,这是最简单的方法。谢谢,刚刚获取数据。 – ilprincipe

+0

我很高兴能帮到你。如果您需要澄清任何事情,请随时发表评论。 – Jacob

0

注意,页面上的元素select改变window.location

我想你可以通过用你需要的值替换$('#pageSizeSelector....-..-..-..-....').val()来构造一个合适的URI来加载页面。

1

您可以使用PySide,它是QtWebKit的绑定。使用QtWebKit,您可以检索使用Javascript的页面,并在Javascript填充html后解析它。所以你不需要知道Javascript。其他选择是SeleniumPhantomJS

2

我用硒解决了这个问题。它是完整的firefox(或其他)浏览器,您可以在代码中操作。