gpt4 book ai didi

r - 如何使用 readLines 和 grep 在 R 中构建网络爬虫?

转载 作者:行者123 更新时间:2023-12-04 09:37:12 26 4
gpt4 key购买 nike

我对 R 很陌生。我想编译一个 100 万字的报纸文章语料库。所以我正在尝试编写一个网络爬虫来检索报纸文章,例如守护者网站:http://www.guardian.co.uk/politics/2011/oct/31/nick-clegg-investment-new-jobs .

爬虫旨在从一页开始,检索文章的正文,删除所有标签并将其保存到文本文件中。然后它应该通过此页面上的链接转到下一篇文章,获取文章等等,直到文件包含大约 100 万个单词。

不幸的是,我的刮刀并没有走多远。

我使用 readLines() 来访问网站的源代码,现在想获取代码中的相关行。

卫报的相关部分使用这个id来标记文章的正文:

<div id="article-body-blocks">         
<p>
<a href="http://www.guardian.co.uk/politics/boris"
title="More from guardian.co.uk on Boris Johnson">Boris Johnson</a>,
the...a different approach."
</p>
</div>

我尝试使用带有 grep 和lookbehind 的各种表达式来掌握本节 - 试图在此 id 之后获取行 - 但我认为它不适用于多行。至少我无法让它工作。

有人可以帮忙吗?如果有人能给我提供一些我可以继续工作的代码,那就太好了!

谢谢。

最佳答案

如果你真的坚持使用grep就会面临清理刮页的问题。和 readLines ,但这当然可以做到。例如。:

加载页面:

html <- readLines('http://www.guardian.co.uk/politics/2011/oct/31/nick-clegg-investment-new-jobs')

并在 str_extract 的帮助下来自 stringr包和一个简单的正则表达式就完成了:
library(stringr)
body <- str_extract(paste(html, collapse='\n'), '<div id="article-body-blocks">.*</div>')

那么, body看起来很丑,你必须从 <p> 清理它和脚本也。这可以通过 gsub 来完成和 friend (不错的正则表达式)。例如:
gsub('<script(.*?)script>|<span(.*?)>|<div(.*?)>|</div>|</p>|<p(.*?)>|<a(.*?)>|\n|\t', '', body)

正如@Andrie 建议的那样,您应该为此目的而使用一些包构建。小演示:
library(XML)
library(RCurl)
webpage <- getURL('http://www.guardian.co.uk/politics/2011/oct/31/nick-clegg-investment-new-jobs')
webpage <- readLines(tc <- textConnection(webpage)); close(tc)
pagetree <- htmlTreeParse(webpage, useInternalNodes = TRUE, encoding='UTF-8')
body <- xpathSApply(pagetree, "//div[@id='article-body-blocks']/p", xmlValue)

哪里 body结果是一个干净的文本:
> str(body)
chr [1:33] "The deputy prime minister, Nick Clegg, has said the government's regional growth fund will provide a \"snowball effect that cre"| __truncated__ ...

更新 :以上为单行(感谢@Martin Morgan 的建议):
xpathSApply(htmlTreeParse('http://www.guardian.co.uk/politics/2011/oct/31/nick-clegg-investment-new-jobs', useInternalNodes = TRUE, encoding='UTF-8'), "//div[@id='article-body-blocks']/p", xmlValue)

关于r - 如何使用 readLines 和 grep 在 R 中构建网络爬虫?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7958053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com