R web跨越域名

时间:2017-11-21 19:09:21

标签: r web-scraping

我正在开展一个涉及从小型组织的数千个网站中抓取文本的项目。我是R的新手,在此项目之前没有网络报废的经验。以下是我的代码网站示例:

library(rvest)
soya<-read_html("http://www.soyaquaalliance.com/")

all_text<-soya %>%
  html_nodes("div") %>%
  html_text()
gsub('[\r\n\t]', '',all_text)

sink(file="C:soya.txt")
cat(all_text)
sink(NULL)

我的目标是抓取域中的所有内容并将其导出到每个站点的单个txt文件。我尝试了lapply,但似乎需要了解每个网站的格式。

是否有通用功能可以清除每个站点内页面的所有文本?

2 个答案:

答案 0 :(得分:1)

我不是在写六条评论。这不是一个真正的答案 - 答案,所以如果他们感到如此感动,小学生可以记下这一点。

“域中的所有内容”......

您的意思是从起始/抓取整个网站树?

如果是这样,R不适合这个。 Python也不是。 Python有一些可以工作的框架,R有this但是你要做很多编程来处理边缘情况,异常,解析问题,编码问题,重新发明轮子是没有意义的。

有一些规模但很容易运行的技术,例如Heritrix,这是专为此目的而构建的。您需要花时间编写一个R解决方案来进行抓取,因此请花点时间阅读Heritrix并使用其中一个方便的docker容器来实现它,这样您就不必成为依赖项的专家为了它。运行容器之后,只需在Web界面中编辑配置文件和cpl点击。

它会生成WARC文件,而且我有一些读取该格式的软件包(只是在我的GH周围 - hrbrmstr)。

你也不能“刮掉你想要的东西”b / c“darnit you and some super self-important org or two”想要。有规则。 Heritrix将遵循robots.txt限制(并且您不应该覆盖这些限制因为您的需求不超过网站希望人们做的事情)。这些规则限制路径告诉您爬行的速度。只是b / c你想做超级快速的事情并没有给你权利。你支付网站的费用并不重要。

还有条款&amp;条件/服务条款至少在美国LinkedIn获得了更多合法的牛肉,而其他人已经成功起诉了大量现金。如果我有T&amp; Cs设置限制抓取并且你对我做了,我肯定起诉你并鼓励其他人esp,因为我监视这种类型的访问。违反某些内容提供商建立的协议是不道德的,也越来越违法。再一次,只是b / c你想要做某事并且在技术上可以做某事而不是给你正确的做某事

我进入所有那些b / c听起来像你的超级新手,如果没有在互联网上的数十个网段中禁止你的IP地址,它会做出可能会让你陷入法律麻烦的假设。

我也认真地鼓励你使用真正的抓取平台,然后在R之后进行数据处理。我这样做是为了谋生,并且从不考虑使用R或Python来完成你所建议的任务。

Heritrix还有其他选择。

你很可能会让Python的学生评论说Scrapy是“一个非常好的解决方案,老兄”。听你的危险。

我怀疑我不会用这个说服你,但希望它会阻止其他人走上最终目标的道路。

答案 1 :(得分:0)

要将所有文字转换为矢量等文本,请使用readLines

soya <- readLines("http://www.soyaquaalliance.com/")
soya[1:10]

[1] "<!DOCTYPE html> "                                                                                          
[2] "<html lang=\"en-US\">"                                                                                     
[3] "<head>"                                                                                                    
[4] "\t<meta charset=\"UTF-8\">"                                                                                 
[5] "\t<title>Soy Aquaculture Alliance | Building partnerships for abundant, healthy, homegrown seafood.</title>"
[6] "\t<link rel=\"pingback\" href=\"http://www.soyaquaalliance.com/xmlrpc.php\">"                               
[7] "\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">"            
[8] "\t\t"                                                                                                        
[9] "\t<link rel='dns-prefetch' href='//maps.googleapis.com' />"                                                 
[10] "<link rel='dns-prefetch' href='//fonts.googleapis.com' />"

这为您提供了用于构建站点的原始HTML文本,您必须使用REGEX解析不同的节点。

例如,要找到推文出现的行:

soya[grep('.*class="widget widget_twitter_widget">.*', soya) + 2] %>% trimws
[1] "The perfect salad for spring [some URL]"