我试着从网站上抓取数据。目标是不总是给出所有细节的站点。例如,一个配置文件提供了name, birthday
,而另一个配置文件只提供了name
。
我现在试着用xidel和xpath来掌握这个标签,当有时候不会有几个标签丢失的时候(因为不存在某个特定的细节),这将会很有吸引力。
所以我要求一个解决方案,我可以用一个空的标签填充这些不存在的标签,这样我就可以得到一组相同长度的数据。
之后,我将数据转换为csv,当缺少标记时,所有数据都将关闭一列。
我的xidel请求如下所示:
xidel 'http://www.icaec.org/users/index' -f '//section[@id="content-area"]//article//h5/a' -e 'concat("`",join(//div[@id="members-info"]/(h5 | span) | //div[@class="row pic-professionsal-details"]/div[2]/div | //div[@class="row pic-professionsal-details"]/following-sibling::div/div[1]//div,"`;`"),"`")' | sed "s/\"/\\\"/g" | sed "s/\`/\"/g" >> icaec.csv
有问题的xpath表达式如下所示:
'concat("`",join(//div[@id="members-info"]/(h5 | span) | //div[@class="row pic-professionsal-details"]/div[2]/div | //div[@class="row pic-professionsal-details"]/following-sibling::div/div[1]//div,"`;`"),"`")'
它或多或少是
//div[@id="members-info"]/(h5 | span)
//div[@class="row pic-professionsal-details"]/div[2]/div
//div[@class="row pic-professionsal-details"]/following-sibling::div/div[1]//div
发布于 2016-11-14 00:11:46
XQuery支持XPath和Xidel 3.0,因此您可以创建序列,使用某些默认值替换缺少的项目,例如给定
<items>
<item>
<foo>foo 1</foo>
<bar>bar 1</bar>
</item>
<item>
<foo>foo 2</foo>
</item>
<item>
<bar>bar 3</bar>
</item>
</items>
XQuery 3.0表达式
string-join(//item!string-join(((foo, 'foo default')[1], (bar, 'bar default')[1]), ';'), ' ')
输出
foo 1;bar 1
foo 2;bar default
foo default;bar 3
发布于 2016-11-13 22:46:56
XPath用于对存在于XML文档中的节点进行selection。不能选择尚不存在的节点。(XQuery:有关/XPath3.0如何在创建序列时指定默认值的信息,请参阅Martin Honnen's answer。今年的Xidel已经更新,完全支持XQuery/XPath3.0。)
XSLT用于transformation文档,可以重新排列节点或创建新的节点。您的需求已经从选择发展到了转换。
https://stackoverflow.com/questions/40573861
复制相似问题