【问题标题】:Python scraper mechanize/javascriptPython刮板机械化/ javascript
【发布时间】:2013-06-09 18:19:27
【问题描述】:

我必须从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

【问题讨论】:

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

标签: javascript python web-scraping web-crawler mechanize-python


【解决方案1】:

好的,这是一种古怪的方法。玩弄不同的搜索设置,我发现要显示的结果数量在 url 中。所以我把它改成了每页 3000 个,这样一页就可以了。

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 文件。

【讨论】:

  • 不知何故我错过了这个,这是最简单的方法。谢谢,正在获取数据。
  • 我很高兴能帮上忙。如果您需要澄清任何其他内容,请随时发表评论。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 我对 Javscript 几乎一无所知。我该怎么做呢?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-13
        • 2018-04-21
        • 1970-01-01
        相关资源
        最近更新 更多