在R中刮掉HTML文本的某一部分

时间:2017-05-24 19:19:50

标签: r xml rvest

我正在尝试抓取国家气象服务网页,只取出部分文本并将其转换为R中的角色对象。它最终会成为NWS页面上显示的一个小段落。 (见下文)

我一直在用rvest包抓取网页,并尝试了一些XML包的代码。

这是我的代码,其中包含了Weather Service URL。

weather_con <- read_html("http://forecast.weather.gov/product.php?site=TWC&issuedby=TWC&product=AFD&format=txt&version=1&glossary=1")

weather_con <- weather_con %>%
 html_nodes("#localcontent") %>%
  html_text()

我也尝试过使用rvest和XML包以及这段代码

weather_con <- getURL("http://forecast.weather.gov/product.php?site=TWC&issuedby=TWC&product=AFD&format=txt&version=1&glossary=1")

weather_con <- htmlParse(weather_con, asText = T)

这两组代码都在页面的所有文本中读取。我尝试了其他选项,并试图找到页面的节点来抓取文本的某些部分,但我还没有找到任何有用的东西。我对HTML没什么经验,所以我可能会在这里找不到容易的东西。

我想要退出网页的是SYNOPSIS段落。这是一个靠近页面顶部的小段,方便地以两个&amp;&amp; amp;符号在段落结束的下面一行。

也许我需要类似substr函数的东西,我可以直接删除该段落。但是,我希望在rvest和XML中找到一些东西来完成这项工作。

有什么建议吗?

谢谢

1 个答案:

答案 0 :(得分:2)

weather_con已经包含了您需要的文字,但它附带了所有其他文字。

提取它的一种方法是使用正则表达式。

synopsis = regmatches(x = weather_con, 
                      m = regexpr(pattern = "SYNOPSIS[^&]*",
                                  text = weather_con))

这将捕获从SYNOPSIS到第一个非&的所有内容。

结果:

 [1] "SYNOPSIS...Strong high pressure aloft will
 maintain well above\naverage temperatures today. Thursday
 and Friday will see us between\nlow pressure developing
 north of the area and high pressure shifting\nsouthward.
 As a result, expect gusty winds and several degrees
 of\ncooling. Strengthening high pressure this weekend
 will again push\ntemperatures above average.\n\n"

如果synopsys包含&,那么您可以捕获文本直到单词DISCUSSION。

synopsis2 = regmatches(x = weather_con, 
                       m = regexpr(pattern = "SYNOPSIS.*DISCUSSION",
                                   text = weather_con))

结果相似。此结果以above average.\n\n&&\n\n.DISCUSSION

结尾