2

Мне нужно очистить всю информацию о бывших губернаторах США от this site. Однако, чтобы зачитать результаты, а затем следовать ссылкам, мне нужно получить доступ к различным страницам результатов или, желательно, просто установить предел результатов, показанный на странице, максимум до 100 (я не думаю, что их более 100 результаты для каждого состояния). Тем не менее, информация на странице, похоже, использует javascript, не является частью формы, и, похоже, я не могу получить к ней доступ в качестве элемента управления.Python scraper mechanize/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.

Я думаю, что вы можете создать соответствующий URI для загрузки страницы, просто заменив $('#pageSizeSelector....-..-..-..-....').val() на нужное вам значение.

1

Вы можете использовать PySide, который является обязательным для QtWebKit. С QtWebKit вы можете получить страницу, использующую Javascript, и проанализировать ее, как только Javascript заполнит html. Поэтому вам не нужно знать о Javascript. Другие альтернативы: Selenium и PhantomJS.

2

Я решаю эту проблему с селеном. Это полный браузер Firefox (или другой), который вы можете манипулировать в коде.