2012-04-13 1 views
1

abrufen Ich verwende LXML und Python, um über eine Seite zu verschrotten. Der Link zur Seite ist HERE. Der Schluckauf, dem ich gerade gegenüberstehe, ist, wie man das Attribut im Tag holt. Zum Beispiel können die drei Goldsterne am oberen Rand der Seite, haben sie eine htmlVerschrotten: Wie Sie ein Attribut in einem <abbr> Tag

<abbr title="3" class="average rating large star3">★★★☆☆</abbr> 

Hier möchte ich den Titel holen, damit ich weiß, wie viele Sterne dieser Lage hat zu bekommen.

Ich habe versucht, ein paar Dinge, einschließlich dies zu tun:

response = urllib.urlopen('http://www.insiderpages.com/b/3721895833/central-kia-of-irving-irving').read() 
mo = re.search(r'<div class="rating_box">.*?</div>', response) 
div = html.fromstring(mo.group(0)) 
title = div.find("abbr").attrib["title"] 
print title 

Aber ist für mich nicht. Hilfe wäre willkommen.

Antwort

4

Don't use regex to extract data from html. Sie haben lxml, verwenden Sie es (XPath).

>>> import lxml.html as html 
>>> page = html.parse("http://www.insiderpages.com/b/3721895833/central-kia-of-irving-irving") 
>>> print page.xpath("//div[@class='rating_box']/abbr/@title") 
['3'] 
+2

Ihnen ist besser. Ich wusste nicht, dass Lxml die Seiten selbst abrufen kann. – WooParadog

+0

Danke !!! sehr elegante Lösung –

2

Haben Sie xpath versucht?

In [38]: from lxml import etree 

In [39]: import urllib2 

In [40]: html = etree.fromstring(urllib2.urlopen('http://www.insiderpages.com/b/3721895833/central-kia-of-irving-irving').read(), parser) 

In [41]: html.xpath('//abbr')[0].xpath('./@title') 
Out[41]: ['3'] 
Verwandte Themen