2012-03-28 3 views
0

У меня есть мой HTML-код, который выглядит ниже. Я хотел бы получить текст, который находится в <span class="zzAggregateRatingStat">. В соответствии с приведенной ниже, например, я хотел бы получить 3 и 5.Получение данных с использованием Python & lxml

Для этой работы я использую python2.7 & LXML

<div class="pp-meta-review"> 
<span class="zrvwidget" style=""> 
    <span g:inline="true" g:type="NumUsersFoundThisHelpful" g:hideonnoratings="true" g:entity.annotation.groups="maps" g:entity.annotation.id="http://maps.google.com/?q=Central+Kia+of+Irving++(972)+659-2204+loc:+1600+East+Airport+Freeway,+Irving,+TX+75062&gl=US&sll=32.83624,-96.92526" g:entity.annotation.author="AIe9_BH8MR-1JD_4BhwsKrGCazUyU5siqCtjchckDcg5BAl5rOLd9nvhJJDTrtjL-xFI8D42bD_7"> 
     <span class="zzNumUsersFoundThisHelpfulActive" zzlabel="helpful"> 
      <span> 
       <span class="zzAggregateRatingStat">3</span> 
      </span> 
      <span> 
       <span>&nbsp;</span> 
         out of 
       <span>&nbsp;</span> 
      </span> 
      <span> 
       <span class="zzAggregateRatingStat">5</span> 
      </span> 
      <span> 
       <span>&nbsp;</span> 
        people found this review helpful. 
      </span> 
     </span> 
    </span> 
</span> 
</div> 
+1

* Получите текст, который находится в. * <- завершите это предложение, пожалуйста, – PenguinCoder

+1

... и закончить вопрос, показывая, что вы пробовали. –

+0

Мне очень жаль опечатку. Stackoverflow принял это как HTML-тег –

ответ

0

Это clearly documented at the lxml website

from lxml.etree import fromstring 
from lxml.cssselect import CSSSelector 

sel = CSSSelector('.zzAggregateRatingStat') 
text = '<span><span class="zzAggregateRatingStat">3</span></span>' 
doc = fromstring(text) 
el = sel(doc)[0] 
print el.text 
+0

поблагодарить u за ответ, я пробовал этот код на веб-сайте http://maps.google.com/maps/place?cid=7101561317478851901&view=feature&mcsrc=google_reviews&num=100&start=0&ved = 0CFYQtQU & sa = X & ei = mwR0T_HtEILFkAXXt4GwCQ, но все напрасно, можете ли вы заглянуть в него? –

+0

@ Zulaikha, если вы пытаетесь получить рейтинги для предприятий, вы можете посмотреть API, доступные из Google и Yelp, а не на соскабливание страниц. – ChrisP

4

Следующий код работает с ваш вход:

import lxml.html 
root = lxml.html.parse('text.html').getroot() 
for span in root.xpath('//span[@class="zzAggregateRatingStat"]'): 
    print span.text 

это принты:

3 
5 

Я предпочитаю использовать lxml «s над XPath CSSSelectors хотя оба они могут сделать эту работу.

пример печатает ChrisP в 3, но если вы запустите его на вход фактического мы получаем ошибки:

$ python chrisp.py 
Traceback (most recent call last): 
    File "chrisp.py", line 6, in <module> 
    doc = fromstring(text) 
    File "lxml.etree.pyx", line 2532, in lxml.etree.fromstring (src/lxml/lxml.etree.c:48270) 
    File "parser.pxi", line 1545, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:71812) 
    File "parser.pxi", line 1424, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:70673) 
    File "parser.pxi", line 938, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:67442) 
    File "parser.pxi", line 539, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:63824) 
    File "parser.pxi", line 625, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:64745) 
    File "parser.pxi", line 565, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:64088) 
lxml.etree.XMLSyntaxError: EntityRef: expecting ';', line 3, column 210 

код ChrisP можно изменить, чтобы использовать lxml.html.fromstring - что является более мягким, анализатор - вместо lxml.etree.fromstring.

Если это изменение сделано, оно печатает 3.

+0

Эй, спасибо за ответ, я не могу полностью указать ваш код для веб-сайта http://maps.google.com/maps/place?cid=7101561317478851901&view=feature&mcsrc=google_reviews&num=100&start=0&ved=0CFYQtQU&sa=X&ei = mwR0T_HtEILFkAXXt4GwCQ. Он продолжает давать разные ошибки –

+0

, изменяя lxml.etree.fromstring на lxml.html.fromstring работает! Tanx! проблема только в том, что у вас нет опции pretty_print в lxml.html :( – karantan