Script Bash para extrair algumas informações de páginas HTML do Ebay

5

Eu gostaria de filtrar a saída de uma pesquisa no ebay que eu exportei para um arquivo de texto. Há vários resultados na pesquisa, mas incluí apenas um exemplo na parte inferior desta postagem, pois presumo que poderei usar o mesmo método para filtrar todos os resultados (mantém tudo organizado aqui!) . Eu meio que conheço o básico de filtrar o URL usando sed e grep, mas eu gostaria que a saída fosse exibida de uma maneira específica. Eu quero o URL seguido por uma vírgula, seguido pelo preço. Por exemplo:

link , £ 73.69

Uma coisa que eu vou apontar neste ponto é que existem alguns URLs dentro do arquivo de texto que não são úteis (por exemplo, link ), mas eles têm um formato diferente do tipo que eu estou interessado (ou seja, o que eu usei no primeiro exemplo). Alguém sabe como posso conseguir isso? Obrigado

<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>
    
por neilH 09.02.2016 / 18:04

2 respostas

3

A melhor maneira de obter dados do eBay é por meio de sua API . Dito isto, às vezes tudo que você tem é HTML, então eu vou cobrir isso na minha resposta.

Nem tente extrair informações de HTML com ferramentas como sed e grep. É difícil de fazer quando funciona e é extremamente frágil. Este caminho é uma loucura .

Se você tiver que analisar HTML, use uma ferramenta para analisar HTML, como a biblioteca BeautifulSoup do Python, < href="http://search.cpan.org/perldoc?HTML::TreeBuilder"> HTML :: TreeBuilder , Ruby nokogiri , 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)
    
por 10.02.2016 / 01:03
0

Aqui está uma solução rápida e suja:

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

Ele simplesmente extrai o que parece ser hrefs e o que parece ser os preços, esperando que você obtenha uma sequência alternada de URLs e preços. Em seguida, une linhas consecutivas para obter o formato desejado.

    
por 10.02.2016 / 01:08