2013-05-30 8 views
5

Я пытаюсь выполнить задачу с помощью R, чтобы очистить данные на веб-сайте.Скребок с сайта aspx с использованием R

  1. Я хотел бы пройти через каждую ссылку на следующей странице: http://capitol.hawaii.gov/advreports/advreport.aspx?year=2013&report=deadline&rpt_type=&measuretype=hb&title=House Bills

  2. Выберите только элементы с Текущий статус показывая «передается губернатору». Например, http://capitol.hawaii.gov/measure_indiv.aspx?billtype=HB&billnumber=17&year=2013

  3. И после этого слом ячеек в СТАТУССКОМ ТЕКСТЕ для следующего раздела «Пройденное окончательное чтение». Например: прошедшее окончательное чтение с поправками, внесенными в SD 2 с представителем (лицами) Fale, Jordan, Tsuji, голосовавшим с оговорками; Представитель (ы) Кабанилла, Морикава, Оширо, Токиока, голосующие нет (4), и ни один из них не оправдан (0).

Я попытался с помощью предыдущих примеров с пакетами RCurl и XML (в R), но я не знаю, как правильно использовать их для ASPX сайтов. Так что я бы хотел, чтобы это было: 1. Некоторое предложение о том, как создать такой код. 2. И рекомендации по изучению знаний, необходимых для выполнения такой задачи.

Спасибо за любую помощь,

Том

+0

Я предлагаю вам посмотреть через эту тему здесь, где я пытался научиться скрести сайт. http://www.talkstats.com/showthread.php/26153-Still-trying-to-learn-to-scrape?highlight=still+learning+to+scrape –

+0

Я потратил несколько часов на это, это непросто: (вы можете получить содержимое первой страницы, но затем второе не принимает меня, проходящее в '__VIEWSTATE' и несколько других параметров [как показано здесь] (http://stackoverflow.com/questions/15853204/how- to-login-and-then-download-a-file-from-aspx-web-pages-with-r). Я могу добраться до 'resp <-GET (" http://capitol.hawaii.gov/advreports/ advreport.aspx? year = 2013 & report = deadline & rpt_type = & measuretype = hb & title = House Bills "); writeBin (content (resp, 'raw'), tf); readHTMLTable (tf) $ GridViewReports', но второй сайт убивает его :( –

ответ

5
require(httr) 
require(XML) 

basePage <- "http://capitol.hawaii.gov" 

h <- handle(basePage) 

GET(handle = h) 

res <- GET(handle = h, path = "/advreports/advreport.aspx?year=2013&report=deadline&rpt_type=&measuretype=hb&title=House") 

# parse content for "Transmitted to Governor" text 
resXML <- htmlParse(content(res, as = "text")) 
resTable <- getNodeSet(resXML, '//*/table[@id ="GridViewReports"]/tr/td[3]') 
appRows <-sapply(resTable, xmlValue) 
include <- grepl("Transmitted to Governor", appRows) 
resUrls <- xpathSApply(resXML, '//*/table[@id ="GridViewReports"]/tr/td[2]//@href') 

appUrls <- resUrls[include] 

# look at just the first 

res <- GET(handle = h, path = appUrls[1]) 

resXML <- htmlParse(content(res, as = "text")) 


xpathSApply(resXML, '//*[text()[contains(.,"Passed Final Reading")]]', xmlValue) 

[1] "Passed Final Reading as amended in SD 2 with Representative(s) Fale, Jordan, 
Tsuji voting aye with reservations; Representative(s) Cabanilla, Morikawa, Oshiro, 
Tokioka voting no (4) and none excused (0)." 

Пусть пакет httr обрабатывать всю подготовительную работу по созданию handle.

Если вы хотите запустить через все 92 ссылки:

# get all the links returned as a list (will take sometime) 
# print statement included for sanity 
res <- lapply(appUrls, function(x){print(sprintf("Got url no. %d",which(appUrls%in%x))); 
            GET(handle = h, path = x)}) 
resXML <- lapply(res, function(x){htmlParse(content(x, as = "text"))}) 
appString <- sapply(resXML, function(x){ 
        xpathSApply(x, '//*[text()[contains(.,"Passed Final Reading")]]', xmlValue) 
         }) 


head(appString) 

> head(appString) 
$href 
[1] "Passed Final Reading as amended in SD 2 with Representative(s) Fale, Jordan, Tsuji voting aye with reservations; Representative(s) Cabanilla, Morikawa, Oshiro, Tokioka voting no (4) and none excused (0)." 

$href 
[1] "Passed Final Reading, as amended (CD 1). 25 Aye(s); Aye(s) with reservations: none . 0 No(es): none. 0 Excused: none."             
[2] "Passed Final Reading as amended in CD 1 with Representative(s) Cullen, Har voting aye with reservations; Representative(s) McDermott voting no (1) and none excused (0)." 

$href 
[1] "Passed Final Reading, as amended (CD 1). 25 Aye(s); Aye(s) with reservations: none . 0 No(es): none. 0 Excused: none."         
[2] "Passed Final Reading as amended in CD 1 with none voting aye with reservations; Representative(s) Hashem, McDermott voting no (2) and none excused (0)." 

$href 
[1] "Passed Final Reading, as amended (CD 1). 24 Aye(s); Aye(s) with reservations: none . 0 No(es): none. 1 Excused: Ige."      
[2] "Passed Final Reading as amended in CD 1 with none voting aye with reservations; none voting no (0) and Representative(s) Say excused (1)." 

$href 
[1] "Passed Final Reading, as amended (CD 1). 25 Aye(s); Aye(s) with reservations: none . 0 No(es): none. 0 Excused: none."       
[2] "Passed Final Reading as amended in CD 1 with Representative(s) Johanson voting aye with reservations; none voting no (0) and none excused (0)." 

$href 
[1] "Passed Final Reading, as amended (CD 1). 25 Aye(s); Aye(s) with reservations: none . 0 No(es): none. 0 Excused: none." 
[2] "Passed Final Reading as amended in CD 1 with none voting aye with reservations; none voting no (0) and none excused (0)." 
+0

Thank вы, user1609452. Это хорошая отправная точка для меня, чтобы понять, как очистить страницы aspx. – user2300643

+0

спасибо тоже! Это фантастика :) –

+0

Извините, user1609452. Можно ли перечислить все соответствующие URL-адреса крысы ей меньше 1 за раз? Еще раз спасибо! – user2300643

Смежные вопросы