【问题标题】:Collecting data from web sites从网站收集数据
【发布时间】:2014-08-13 13:38:07
【问题描述】:

我有两个网页

第 1 页:

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

第2页:http://someUrl.html

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

我想抓取第 1 页并点击那里的所有链接并生成以下输出

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

我如何使用 Xidel 实现这一目标?

【问题讨论】:

    标签: xidel


    【解决方案1】:

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

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

    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 上交换引号 双引号! 如果您需要解释行中的不同部分,请询问... :-) 干杯!

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2018-07-06
      • 1970-01-01
      相关资源
      最近更新 更多