我正在尝试抓一个网页
library(RCurl)
webpage <- getURL("https://somewebpage.com")
webpage
<div class='CredibilityFacts'><span id='qZyoLu'><a class='answer_permalink'
action_mousedown='AnswerPermalinkClickthrough' href='/someurl/answer/my_id'
id ='__w2_yeSWotR_link'>
<a class='another_class' action_mousedown='AnswerPermalinkClickthrough'
href='/ignore_url/answer/some_id' id='__w2_ksTVShJ_link'>
<a class='answer_permalink' action_mousedown='AnswerPermalinkClickthrough'
href='/another_url/answer/new_id' id='__w2_ksTVShJ_link'>
class(webpage)
[1] "character"
我正在尝试提取所有href
值,但仅在其前面有answer_permalink
类时才会提取。
这个的输出应该是
[1] "/someurl/answer/my_id" "/another_url/answer/new_id"
/ignore_url/answer/some_id
应该被忽略,因为它前面有another_class
而不是answer_permalink
类。
现在,我正在考虑采用正则表达式的方法。我认为这样的东西可以用于stri_extract_all
class='answer_permalink'.*href='
但这并不是我想要的。
我能以什么方式实现这一目标?此外,除了正则表达式之外,R中还有一个函数,我们可以像Javascript一样逐个提取元素吗?
答案 0 :(得分:5)
我们可以使用dplyr
和rvest
:
library(rvest)
library(dplyr)
"https://www.quora.com/profile/Ronak-Shah-96" %>%
read_html() %>%
html_nodes("[class='answer_permalink']") %>%
html_attr("href")
[1] "/How-can-we-adjust-in-engineering-if-we-are-not-in-IITs-or-NITs-How-can-we-enjoy-engineering-if-we-are-pursuing-it-from-a-local-private-college/answer/Ronak-Shah-96" [2] "/Do-you-think-it-is-worth-it-to-change-my-career-path-For-the-past-2-years-I-was-pursuing-a-career-in-tax-advisory-in-a-BIG4-company-I-just-got-a-job-offer-that-will-allow-me-to-learn-coding-It-is-not-that-well-paid/answer/Ronak-Shah-96" [3] "/Why-cant-India-opt-for-40-hours-work-a-week-for-all-professions-when-it-is-proved-and-working-well-in-terms-of-efficiency/answer/Ronak-Shah-96" [4] "/Why-am-I-still-confused-and-thinking-about-my-career-after-working-more-than-one-year-in-software-engineering/answer/Ronak-Shah-96" [5] "/Would-you-rather-be-a-jack-of-all-trades-or-the-master-of-one-trade/answer/Ronak-Shah-96"
答案 1 :(得分:4)
您可以使用rvest
或xml2
等包来代替字符串解析:
library(xml2)
xml <- read_html(webpage)
l <- as_list(xml)[[1]][[1]][[1]][[1]] #not sure why you need to go this deep.
l2 <- l[sapply(l, attr, ".class") == "answer_permalink"]
sapply(l2, attr, "href")
a a "/someurl/answer/my_id" "/another_url/answer/new_id"
答案 2 :(得分:3)
require(XML)
require(RCurl)
doc <- getURL("https://www.quora.com/profile/Ronak-Shah-96" )
html <- htmlTreeParse(doc, useInternalNodes = TRUE)
nodes <- getNodeSet(html, "//a[@class='answer_permalink']")
sapply(nodes, function(x) x <- xmlAttrs(x)[["href"]])
[1] "/Do-you-think-it-is-worth-it-to-change-my-career-path-For-the-past-2-years-I-was-pursuing-a-career-in-tax-advisory-in-a-BIG4-company-I-just-got-a-job-offer-that-will-allow-me-to-learn-coding-It-is-not-that-well-paid/answer/Ronak-Shah-96" [2] "/Why-cant-India-opt-for-40-hours-work-a-week-for-all-professions-when-it-is-proved-and-working-well-in-terms-of-efficiency/answer/Ronak-Shah-96" [3] "/Why-am-I-still-confused-and-thinking-about-my-career-after-working-more-than-one-year-in-software-engineering/answer/Ronak-Shah-96" [4] "/Would-you-rather-be-a-jack-of-all-trades-or-the-master-of-one-trade/answer/Ronak-Shah-96" [5] "/Is-software-engineering-a-good-career-choice-I-know-it-pays-well-initially-but-if-you-look-at-the-managing-directors-of-most-companies-they-are-people-with-MBAs/answer/Ronak-Shah-96"