2013-06-13 126 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(或其他)瀏覽器,您可以在代碼中操作。