Bash 脚本从 Ebay HTML 页面中提取一些信息

Bash 脚本从 Ebay HTML 页面中提取一些信息

我想过滤 eBay 上的搜索输出,并将其导出到文本文件。搜索中有很多结果,但我在这篇文章的底部只包含了一个示例,因为我想我将能够使用相同的方法来过滤所有结果(让事情保持整洁!) 。我有点了解使用 sed 和 grep 过滤 url 的基础知识,但我希望以特定方式显示输出。我想要网址后跟一个逗号,然后是价格。例如:

http://www.ebay.co.uk/itm/Principles-Of-Modern-Chemistry-International-Edition-Gillis-H-Pat-Oxtoby-Ca-/161952820281?hash=item25b523ec39:g:MEYAAOSwoydWnvT2, £73.69

此时我要指出的一件事是,文本文件中有一些没有用的 url(例如http://thumbs.ebaystatic.com/images/g/MEYAAOSwoydWnvT2/s-l225.jpg)但它们的格式与我感兴趣的类型不同(即我在第一个示例中使用的格式)。有谁知道我怎样才能实现这一目标?谢谢

<h3 class="lvtitle"><a href="http://www.ebay.co.uk/itm/Principles-Of-Modern-Chemistry-International-Edition-Gillis-H-Pat-Oxtoby-Ca-/161952820281?hash=item25b523ec39:g:MEYAAOSwoydWnvT2"  class="vip" title="Click this link to access Principles Of Modern Chemistry, International Edition Gillis, H. Pat; Oxtoby; Ca">Principles Of Modern Chemistry, International Edition Gillis, H. Pat; Oxtoby; Ca</a>^M
                </h3>^M
        <ul class="lvprices left space-zero">^M
^M
        <li class="lvprice prc">^M
                        <span  class="bold bidsold">
                                        £73.69</span>
                                </li>^M
                <li class="lvformat">^M
                        <span >
                                <span class="logoBin" title="Buy it now"></span>
                                        </span>

答案1

从 eBay 获取数据的最佳方式是通过他们的应用程序编程接口。话虽这么说,有时您拥有的只是 HTML,所以我将在我的回答中介绍这一点。

甚至不要尝试使用 sed 和 grep 等工具从 HTML 中提取信息。当它完全起作用时很难做到,而且非常脆弱。这条路充满了疯狂

如果必须解析HTML,请使用解析HTML的工具,例如Python的美丽汤图书馆,Perl 的HTML::树构建器, 红宝石的诺科吉里, ETC。

#!/usr/bin/env python2
import codecs, sys, BeautifulSoup
html = BeautifulSoup.BeautifulSoup(codecs.open(sys.argv[1], "r", "utf-8").read())
for lv in html.findAll("h3", "lvtitle"):
    url = lv.find("a")["href"]
    bid = lv.findNextSibling("ul").find("span", "bidsold").text.strip()
    print(url, bid)

答案2

这是一个快速但肮脏的解决方案:

sed -n 's/^.*href="\([^"]*\)".*$/\1/p; s/^.*\(£[0-9.]*\).*$/\1/p' |
awk 'NR % 2{ printf "%s, ", $0; next} {print}' 

它只是提取看起来像 href 的内容和看起来像价格的内容,希望您能获得 url 和价格的交替序列。然后连接连续的行以获得您想要的格式。

相关内容