3

我必须从这个网站上为美国前州长搜集所有信息。但是,要读出结果然后点击链接,我需要访问不同的结果页面,或者最好将每页显示的结果限制设置为最大 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
4

5 回答 5

2

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

于 2013-06-25T15:07:28.200 回答
1

您可以使用PySide,它是QtWebKit的绑定。使用 QtWebKit,您可以检索使用 Javascript 的页面,并在 Javascript 填充 html 后对其进行解析。所以你不需要了解 Javascript。其他替代品是SeleniumPhantomJS

于 2013-06-24T13:39:38.230 回答
0

我会用 phantomjs http://phantomjs.org/ (javascript) 做到这一点,请参阅https://github.com/ariya/phantomjs/wiki/Page-Automation

于 2013-06-13T17:29:48.260 回答
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=任何&warsServed=&&pagesizecac77e09-db17-41cb-9de0-687b843338d0=3000

在它确实需要一段时间后,我会右键单击并查看页面源代码。将其复制到我计算机上的文本文件中。然后我可以从文件中抓取我需要的信息,而无需访问服务器并且不必处理 javascript。

我可以推荐“BeautifulSoup”在 html 文件中四处走动。

于 2013-06-26T03:49:52.957 回答
0

请注意,select该页面上的元素会更改window.location.

我认为您可以通过替换$('#pageSizeSelector....-..-..-..-....').val()为您需要的值来构建适当的 URI 来加载页面。

于 2013-06-24T13:13:44.307 回答