r - 我如何从 2004 Wayback machine 站点上抓取这段文本/为什么我运行的代码是错误的?

标签 r xpath web-crawler rcrawler

注意:我之前没有在这里问过问题,并且仍然不确定如何使其清晰易读,因此请让我知道任何困惑或使其更具可读性的提示

我正在尝试从 makeoutclub.com(一个古怪的、现已不复存在的针对另类音乐迷的社交网络,创建于 2000 年左右)的 2004/06 至 2004/09 互联网文件中下载用户信息,这使得它是互联网上最古老的基于个人资料的社交网络之一),使用 r,* 特别是 rcrawler 包。 到目前为止,我已经能够使用该包来获取数据框中的用户名和个人资料链接,使用 xpath 来识别我想要的元素,但不知何故它不适用于个人资料的位置或兴趣部分,两者都只是文本而不是 html 中的其他元素。为了了解我正在谈论的站点/数据,这是我一直在发送 xpath 短信的页面:https://web.archive.org/web/20040805155243/http://www.makeoutclub.com/03/profile/html/boys/2.html

我一直在使用 rcrawler 的 ContentScraper 函数测试我的 xpath 表达式,该函数从需要抓取的网站的一个特定页面中提取与指定 xpath 匹配的一组元素。这是我的功能表达式,它标识网站上的用户名和链接,指定我正在使用的特定页面,并返回一个向量:

testwaybacktable <- ContentScraper(Url = "https://web.archive.org/web/20040805155243/http://www.makeoutclub.com/03/profile/html/boys/2.html", XpathPatterns = c("//tr[1]/td/font/a[1]/@href", "//tr[1]/td/font/a[1]"), ManyPerPattern = TRUE)

这是一个不好的地方,我正在测试“位置”,最终返回一个空向量

testwaybacklocations <- ContentScraper(Url = "https://web.archive.org/web/20040805155243/http://www.makeoutclub.com/03/profile/html/boys/2.html", XpathPatterns = "//td/table/tbody/tr[1]/td/font/text()[2]", ManyPerPattern = TRUE)

另一个不好的,这个在“interests”下寻找文本:

testwaybackint <- ContentScraper(Url = "https://web.archive.org/web/20040805155243/http://www.makeoutclub.com/03/profile/html/boys/2.html", XpathPatterns = "//td/table/tbody/tr[2]/td/font/text()", ManyPerPattern = TRUE)

当我尝试在 Chrome Inspect 中搜索时,我在这里使用的 xpath 表达式似乎选择了正确的元素,但程序似乎没有读取它们。我还尝试为每个字段仅选择一个元素,但它仍然产生一个空向量。我知道这个工具可以读取该网页中的文本——我测试了另一段随机文本——但不知怎的,当我运行这个测试时我什么也没得到。 我的 xpath 表达式有问题吗?我应该使用不同的工具来做到这一点吗? 感谢您的耐心等待!

*这是一个数字人文项目,希望使用一些 NLP 来分析特别是有关性别和性的语言,并与网站上最受欢迎乐队的歌词的一些 NLP 分析进行对话。

最佳答案

虽然回答晚了,但也许还是有帮助的。我也不确定整个 TOS 问题,但我认为这是你要弄清楚的。长话短说......我将尝试解决您问题的技术方面;)

我不熟悉 rcrawler-package。通常我使用 rvest 进行网页抓取,我认为这是一个不错的选择。要获得所需的输出,您必须使用类似的东西

# parameters
url <- your_url
xpath_pattern <- your_pattern
# get the data
wp <- xml2::read_html(url)
# extract whatever you need
res <- rvest::html_nodes(wp,xpath=xpath_pattern)

我认为不可能使用具有多个元素的向量作为模式参数,但您可以为要单独提取的每个模式运行 html_nodes 。

我认为前两个网址/模式应该以这种方式工作。您最后一个网址中的模式似乎有些错误。如果您想提取表格内的文本,它可能应该类似于“//tr[2]/td/font/text()[2]”

关于r - 我如何从 2004 Wayback machine 站点上抓取这段文本/为什么我运行的代码是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60031947/

相关文章:

r - 将大数据帧拆分为更小的段

r - 比较拆分和合并两个数据框

r - 将绘图包装在 Rmd 文件中的另一个 html 容器中

xml - 在 JBoss Drools 中评估 XPath 表达式

Python Selenium 和验证码

python - 使用 beautifulsoup 在 ID 或类名称中查找特定单词

r - 计算 R 中函数在点处的导数

python - 如何使用 xpath & lxml 获取节点的全部内容?

linux - 使用 wget 镜像具有相同名称的路径和子文件夹的网站

java - .getResponse 代码在有效 URL 上抛出 IOException