0

I have two web pages

Page 1:

<data>
<item>
<name>Item 1</name>
<url>http://someUrl.html</url>
</item>
</data>

Page 2: http://someUrl.html

<data>
<info>Info 1</info>
<info>Info 2</info>
<info>Info 3</info>
</data>

I want to crawl page 1 and follow all the links there and generate the following output

Item 1, Info 1
Item 1, Info 2
Item 1, Info 3
...

How can i achieve this using Xidel?

4

1 回答 1

0

我最近发现了 Xidel,所以我不是专家,但在我看来,它是一个非常强大的瑞士刀命令行抓取工具,应该被更多人知道。

现在,为了回答您的问题,我认为以下内容(使用 html-templates)完全符合您的要求:

xidel -q page1.html --extract-exclude=name -e "<name>{name:=text()}</name>*" -f "<url>{link:=text()}</url>*" -e "<info>{string-join(($name, text()), ', ')}</info>*" --hide-variable-names

或者,使用 CSS 选择器甚至更短:

xidel -q page1.html --extract-exclude=name -e "name:=css('name')" -f "link:=css('url')" -e "css('info')/string-join(($name,.),', ')" --hide-variable-names

或者,用 XPath 最短:

xidel -q page1.html --extract-exclude=name -e name:=//name -f link:=//url -e "//info/string-join(($name,.),', ')" --hide-variable-names

可能的最短行(但不是 CSV 格式)是:

xidel -q page1.html -e //name,//info -f //url

上述命令适用于 Windows,因此请确保在 mac/ux 上交换引号 <-> 双引号!如果您需要解释行中的不同部分,请询问... :-) 干杯!

于 2014-08-14T08:31:59.237 回答