Следующий код работает с вашим вводом:
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
.