Script Bash pour extraire certaines informations des pages HTML Ebay

Je voudrais filterr la sortie d'une search sur ebay que j'ai exporté dans un file text. Il y a un certain nombre de résultats dans la search mais je n'ai inclus qu'un seul exemple au bas de ce post car je présume que je pourrai utiliser la même méthode pour filterr tous les résultats. . Je connais les bases du filtrage de l'URL en utilisant sed et grep, mais j'aimerais que la sortie soit affichée d'une manière spécifique. Je veux l'URL suivie d'une virgule, puis suivie par le prix. Par exemple:

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

Une chose que je vais souligner à ce stade est qu'il y a quelques URL dans le file text qui ne sont pas utiles (par exemple http://thumbs.ebaystatic.com/images/g/MEYAAOSwoydWnvT2/s-l225.jpg ) mais ils avoir un format différent du type je suis intéressé (c'est à dire celui que j'ai utilisé dans le premier exemple). Est-ce que quelqu'un sait comment je peux y parvenir? Merci

<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> 

La meilleure façon d'get des données d'eBay est à travers leur API . Cela étant dit, parfois tout ce que vous avez est HTML, donc je vais couvrir cela dans ma réponse.

N'essayez même pas d'extraire des informations de HTML avec des outils comme sed et grep. C'est difficile à faire quand ça marche, et extrêmement fragile. De cette façon se trouve la folie .

Si vous devez parsingr le code HTML, utilisez un outil pour parsingr le code HTML, comme la bibliothèque BeautifulSoup de Python, le HTML :: TreeBuilder de Perl, le nokogiri de Ruby, 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.ssortingp() print(url, bid) 

Voici une solution rapide et sale:

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

Il extrait simplement ce qui ressemble à hrefs et ce qui ressemble à des prix, en espérant que vous obtiendrez une séquence alternée d'URL et de prix. Puis rejoint les lignes consécutives pour get le format que vous voulez.