如何在Xidel中更改导出变量的顺序?

时间:2014-10-14 05:36:37

标签: html xpath xquery scraper xidel

我正在使用Xidel从网页上抓取信息,而且我坚持以不同于页面的顺序导出信息。

示例:

<tr>
<td></td>
<td></td>
<td></td>
<td><a><font><b>{ location:=. }</b></font>{ title:=. }</a></td>
<td>{ dates:=. }</td>
<td></td>
</tr>

此代码将导出为标题,然后是副标题。在Xidel有什么方法可以改变顺序吗?

2 个答案:

答案 0 :(得分:0)

这可能很简单:

xidel -q page.html -e subtitle:=//h2,title:=//h1

像下面这样的东西(有几个“-e”参数)也可以使用,但是和之前的代码一样,它首先将所有字幕组合在一起,然后是页面上的所有标题,这可能不是你想要的... < / p>

xidel -q page.html -e "<div><h2>{subtitle:=.}</h2></div>+" -e "<div><h1>{title:=.}</h1></div>+" 

AFAIK,在您的情况下,Xidel没有订购功能。但你能做的就是编写一个脚本,你可以将值保存为env。使用xidel --output-format cmd(如果是Windows)然后(以正确的顺序)回显/处理这些变量/值的变量。

Dirkk提出了一个很好的建议(不是小组),你的线看起来像这样:

xidel -q page.html --xquery "for $i in //div return (concat('sub:=',$i/h2), concat('title:=',$i/h1))"

答案 1 :(得分:0)

我从未使用过这个工具,但是快速查看文档并发现它支持XQuery,我想以下应该可以工作:

xidel -q page.html --xquery "for $div in //div return ($div/h2, $div/h1)" --output-format xml 

这假设您的页面中有几个这样的div元素,并希望首先单独为字幕排序所有标题,即首先不是所有字幕。此外,由于您没有给出更具体的XML示例,它只是选择所有div并迭代它们 - 在现实世界的HTML中,您可能需要更多特征功能(如id属性)。