对福克斯新闻网站进行爬网时,标头节点为空

时间:2019-06-10 21:02:42

标签: r web-scraping xml2

我正在R中为各个新闻站点编写一个小型的情绪分析程序,当我尝试访问位于https://www.foxnews.com/trending/的“趋势”新闻站点时,Fox News给我带来了一些麻烦。

我正在使用出色的xml2包读取网页,然后尝试访问包含文章标题的节点。从Chrome的“检查”功能中,我可以看到它们都被标记为<h3>节点,因此我想访问所有h3节点并获取其信息。执行此操作的代码如下所示:

library(xml2)
webpage <- "https://www.foxnews.com/trending/"
web_raw <- read_html(webpage)
node <- '//h3'
xml_find_all(web_raw, xpath = node)
# OUTPUT:
# {xml_nodeset (11)}
# [1] <h3></h3>
# [2] <h3></h3>
# [3] <h3></h3>
# ...[cont.]

但是,尽管返回的h3个节点的数量与我的预期相符,但是返回的节点全为空(<h3></h3>

再次使用Chrome的Inspect功能将XPath复制到一个这样的h3节点将返回以下内容:

//*[@id="id_Helicopter"]/a/div[2]/h3

也无法返回预期的标题,而是产生了一个完全空的节点集。

然后我尝试手动构造路径,但是在重新开始返回空节点之前,我只能获得一定数量的节点深度:

# This is the path to the last complete node returned
path <- '/html/body/div/div[@id="wrapper"]/div[@id="main"]/div/div[@class="module articles"]/div[@class="list"]'
# OUTPUT:
# {xml_nodeset (1)}
# [1] <div class="list">\n\t\t\t\t\t<div id="filter">\n\t\t\t\t\t\t... [cont.]

# When I access the unordered list one level deeper, it comes up empty
path <- '/html/body/div/div[@id="wrapper"]/div[@id="main"]/div/div[@class="module articles"]/div[@class="list"]/ul'
# OUTPUT:
# {xml_nodeset (1)}
# [1] <ul></ul>\n

其他说明:

This question询问了一个类似的问题,该问题是由一个脚本创建的,该脚本在用户滚动浏览时呈现了更多网页-但是,他们的解决方案对我不起作用,因为我无法扩展手动浏览网页。

《纽约时报》的功能,可比较的代码如下所示。唯一的区别是NYT将其标题存储在h1标签而不是h3中。

library(xml2)
webpage <- "https://www.nytimes.com/trending/"
web_raw <- read_html(webpage)
node <- "//h1"
xml_find_all(web_raw, xpath = node)
# OUTPUT:
# {xml_nodeset (14)}
# [1] <h1 class="css-1om64mr">Trending</h1>\n
# [2] <h1>Justice Dept. Agrees to Turn Over Key Mueller Evidence to House</h1>
# [3] <h1>Elizabeth Warren Has Lots of Plans. Together, They Would Remake the Economy.</h1>
# ...[cont.]

是否有任何建议可以解决发生的事情?

0 个答案:

没有答案