我需要在“发布名称”列下的每个包含“就业情况”的日期网页抓取http://www.bls.gov/schedule/schedule/2007/2007_sched.htm。网页报废输出应为:
Jan. 5, Feb. 2, 2007, March 9, April 6, May 4, June 1, 2007
July 6, 2007, Aug. 3, Sept. 7, Oct. 5, Nov. 2, 2007, Dec. 7
#year can be ignored/omitted
要为http://www.bls.gov/schedule/news_release/2015_sched.htm实现相同目的,请使用以下内容:
library(rvest)
pg <- read_html("http://www.bls.gov/schedule/news_release/2015_sched.htm")
# target only <td> elements under bodytext div
body <- html_nodes(pg, "div#bodytext")
# use this new set of nodes and a relative XPath to get initial <td> elements, then get their siblings
es_nodes <- html_nodes(body, xpath=".//td[contains(., 'Employment Situation for')]/../td[1]")
# clean up and make dates
nfpdates <- as.Date(trimws(html_text(es_nodes)), format="%A, %B %d, %Y")
存储了nfpdates
下的日期列表。我尝试调整该代码以适用于http://www.bls.gov/schedule/schedule/2007/2007_sched.htm并且失败了。问题是这两个URL以不同的格式存储信息。如果信息以纯文本而不是HTML表格存储,那么如何从该URL中提取日期?谢谢。
答案 0 :(得分:1)
这不是完整的解决方案,但它会从网页中提取包含“就业情况”的请求行。您请求的文本与预标签相关联。在这个页面上有4个部分(第3和第4部分是空的)。
library(rvest)
url <- "http://www.bls.gov/schedule/schedule/2007/2007_sched.htm"
body<-html_nodes(read_html(url), "pre")
#text= xml_text(body[1]) #only uses the first table
text= sapply(1:length(body), function(i) {xml_text(body[i])}) #looks at all tables
#create one list for all the captured lines
table1<-unlist(strsplit(text, "\n"))
#find lines that match the search string
employ<-table1[grepl("The Employment Situation", table1)]
最终结果是:
[1]“就业形势,2006年12月1月5日上午8:30 \ r” [2]“就业形势,2007年1月\ tFeb.2007 / t 8:30 am \ r \ n”
...
此时,需要使用strsplit,gsub,grep来清理并隔离每行的所需文本。 如果您仍然遇到问题可能是另一个Stackoverflow问题,重点是从每行提取日期。 祝你好运。