2016-05-16 2 views
1

У меня есть код ниже. Он идет на 3 отдельные страницы новостей и тянет их содержание. Но для каждой страницы я должен искать другой настраиваемый тег html.R web scraping новостного сайта: как тянуть основное содержание

  1. Есть ли способ получить информацию с любой страницы новостей, выполнив поиск всего за 1 тег? Это позволит мне, чтобы очистить информацию от многих страниц
  2. Как я поиск по тегам, соответствующих определенным критериям: для например html_nodes like ("#main*") или html_nodes like ("*main*")

library(MASS) # base R

library(XML) 
library(xml2) 
library(rvest) # R web scraping 


    # get the page using rvest fcns 
    page2 <- read_html("http://seekingalpha.com/article/3974491-3-things-will-save-intels-future"); 

     page.all2 <- page2 %>% 
     html_nodes("#main_container") %>% 
     #html_nodes(class="*main*") %>% 
     html_text() 
    page.all2 

    page5 <- read_html("http://www.fool.com/investing/general/2016/05/09/intel-corporations-strange-choice.aspx"); 
    page.all5 <- page5 %>% 
     html_nodes("#article-1") %>% 
     html_text() 
     page.all5 

    page1 <- read_html("http://www.valuewalk.com/2016/05/intel-no-2-explains-company-headed/ "); 
    page.all1 <- page1 %>% 
     html_nodes("#main") %>% 
     html_text() 
    page.all1 

    # get a URL (1 URL per row in column link); 
+0

Для всех 3 сайтов вы соглашаетесь не «использовать любой робот, паук, приложение поиска/поиска на сайте или другое ручное или автоматическое устройство или процесс для загрузки, извлечения, индексирования,« data mine », «очистить», «собрать урожай» или каким-либо образом воспроизвести или обойти навигационную структуру или презентацию Сайта или его содержимого; _ "... создавать тезисы из нашего сайта или очищать его, _ _; _ «Любое другое использование Материалов на этом веб-сайте, включая любую форму копирования или воспроизведения ... строго запрещено и нарушает наши имущественные права». _ (Просто потому, что вы не можете это сделать) – hrbrmstr

ответ

1

Учитывая

html <- ' 
<div class="pain">A</div> 
<div class="pain">B</div> 
<div class="mainer">C</div> 
<div class="emainer">D</div>' 

вы можете сделать например

# all tags of class 'pain' 
read_html(html) %>% xml_nodes(xpath="//*[@class='pain']") 
# {xml_nodeset (2)} 
# [1] <div class="pain">A</div> 
# [2] <div class="pain">B</div> 

# All DIV tags, where class names start with 'main' 
read_html(html) %>% xml_nodes(xpath="//div[starts-with(@class, 'main')]") 
# {xml_nodeset (1)} 
# [1] <div class="mainer">C</div> 

# All DIV tags, where class names contain 'main' 
read_html(html) %>% xml_nodes(xpath="//div[contains(@class, 'main')]") 
# {xml_nodeset (2)} 
# [1] <div class="mainer">C</div> 
# [2] <div class="emainer">D</div> 
+0

Это отвечает моим Второй вопрос. Что-нибудь о 1-м? У меня есть тысячи страниц, и я не смогу выполнить поиск каждого из них для правильного тега html ... есть ли какой-нибудь «универсальный тег html», который вернет содержимое страницы для всех страниц? – user2543622

+0

Нет, нет «однопользовательского тега html». FWIW, вы можете получить весь контент с помощью 'read_html (html)%>% html_text'. – lukeA

+0

есть способ скопировать conten/output 'read_html (html)%>% xml_nodes (xpath =" // * [@ class = 'pain'] ")' в переменную? – user2543622