Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用RCrawler';什么是XPathpat?_R_Xpath_Web Crawler_Rcrawler - Fatal编程技术网

如何使用RCrawler';什么是XPathpat?

如何使用RCrawler';什么是XPathpat?,r,xpath,web-crawler,rcrawler,R,Xpath,Web Crawler,Rcrawler,我正在尝试使用Rcrawler获取博物馆藏品的标签和数据。我想我在使用ExtractXpathPat变量时犯了一个错误,但我不知道如何修复它 我希望得到如下输出: 1;"Titel(s)";"De StaalmeestersDe waardijns van het Amsterdamse lakenbereidersgilde, bekend als ‘De Staalmeesters’" 1;"Objecttype";"Schilderij" 1;"Objectnummer";"SK-A-29

我正在尝试使用Rcrawler获取博物馆藏品的标签和数据。我想我在使用
ExtractXpathPat
变量时犯了一个错误,但我不知道如何修复它

我希望得到如下输出:

1;"Titel(s)";"De StaalmeestersDe waardijns van het Amsterdamse lakenbereidersgilde, bekend als ‘De Staalmeesters’"
1;"Objecttype";"Schilderij"
1;"Objectnummer";"SK-A-2931"
<div class="item">
      <h3 class="item-label h4-like">Objectnummer</h3>
      <p class="item-data">SK-A-2931</p>
</div>
Rcrawler(Website = "https://www.rijksmuseum.nl/nl/", 
         no_cores = 4, no_conn = 4,
         dataUrlfilter = '.*/collectie/.*',
         ExtractXpathPat = c('//*[@class="item-label h4-like"]', '//*[@class="item-data"]'), 
         PatternsNames = c('label','data'),
         ManyPerPattern = TRUE)
但是,输出文件在第3个位置重复标题:

1;"Titel(s)";"De StaalmeestersDe waardijns van het Amsterdamse lakenbereidersgilde, bekend als ‘De Staalmeesters’"
1;"Objecttype";"De StaalmeestersDe waardijns van het Amsterdamse lakenbereidersgilde, bekend als ‘De Staalmeesters’"
1;"Objectnummer";"De StaalmeestersDe waardijns van het Amsterdamse lakenbereidersgilde, bekend als ‘De Staalmeesters’"
HTML如下所示:

1;"Titel(s)";"De StaalmeestersDe waardijns van het Amsterdamse lakenbereidersgilde, bekend als ‘De Staalmeesters’"
1;"Objecttype";"Schilderij"
1;"Objectnummer";"SK-A-2931"
<div class="item">
      <h3 class="item-label h4-like">Objectnummer</h3>
      <p class="item-data">SK-A-2931</p>
</div>
Rcrawler(Website = "https://www.rijksmuseum.nl/nl/", 
         no_cores = 4, no_conn = 4,
         dataUrlfilter = '.*/collectie/.*',
         ExtractXpathPat = c('//*[@class="item-label h4-like"]', '//*[@class="item-data"]'), 
         PatternsNames = c('label','data'),
         ManyPerPattern = TRUE)
目标澄清 HTML页面并不总是具有相同的标签,有时它具有没有相应数据的标签。有时数据在段落中,有时在无序列表中

我的最终目标是创建一个csv,其中包含站点的所有标签以及每行中的相应数据


这个问题是开始收集标签和数据的第一步,然后我将使用这些标签和数据创建上述csv。

我不使用RCrawler进行刮取,但我认为您的XPath需要修复。我是为你做的:

Rcrawler(Website = "https://www.rijksmuseum.nl/nl/", 
         no_cores = 4, no_conn = 4,
         dataUrlfilter = '.*/collectie/.*',
         ExtractXpathPat = c("//h3[@class='item-label h4-like'][.='Titel(s)']/following-sibling::p/text()","//h3[@class='item-label h4-like'][.='Objecttype']/following::a[1]/text()","//h3[@class='item-label h4-like'][.='Objectnummer']/following-sibling::p/text()"), 
         PatternsNames = c("Titel(s)", "Objecttype","Objectnummer"),
         ManyPerPattern = TRUE)
我运行了几分钟,它似乎起了作用:

DATA[[1]]
$`PageID`
[1] 1

$`Titel(s)`
[1] "De Staalmeesters"                                                                   
[2] "De waardijns van het Amsterdamse lakenbereidersgilde, bekend als ‘De Staalmeesters’"

$Objecttype
[1] "schilderij"

$Objectnummer
[1] "SK-C-6"
更多选择:

蛮力。由于您还不知道所有的标签名称,如果您不想编写特定的XPath,您可以在RCrawlers ExtractXpathPat中尝试以下操作:

c("string((//h3[@class='item-label h4-like'])[1]/parent::*)","string((//h3[@class='item-label h4-like'])[2]/parent::*)",...,"string((//h3[@class='item-label h4-like'])[30]/parent::*)")
这里,我们只是从位置1增加到位置30。你可以试试40,50,由你决定

模式名称=c(“项目1”、“项目2”、“项目30”)

结果示例:

Item1:Title(s) The Seven Works of MercyPolyptych with the Seven Works of Charity 
Item2:Object type painting 
Item3:Object number SK-A-2815
...
Item17:Parts The Seven Works of Mercy (SK-A-2815-1) The Seven Works of Mercy (SK-A-2815-2) The Seven Works of Mercy (SK-A-2815-3) The Seven Works of Mercy (SK-A-2815-4) The Seven Works of Mercy (SK-A-2815-5) The Seven Works of Mercy (SK-A-2815-6) The Seven Works of Mercy (SK-A-2815-7)
...
Item29:
Item30:
然后,您需要使用适当的工具(dplyr、stringr)整理数据(分割、修剪、重组…),以生成适当的csv

如果此选项不起作用,您可以确定您可能拥有的所有标签名称(获取网页的所有
//h3[@class='item-label h4 like']/text()
,并删除重复项以仅保留唯一值。然后相应地编写XPath。这样可以更容易地生成.csv


您还可以在RCrawler之外工作(使用其他工具),编写一些函数来正确地刮取数据(使用apply函数或for循环).

我需要用标签获取所有项目数据,并且不是每个页面都有相同的数据。有没有办法创建一个通用xpath来实现您的解决方案的功能?我已经更新了我的答案。~675000可以刮取。这是一条很长的路。除非您只对绘画感兴趣。这似乎是可行的,尽管我还没有完成所有675000然而