Я написал скрипт на python в сочетании с библиотекой lxml для анализа некоторых price
(в данном случае 80 и 100) из фрагмента html elements
.Я использовал xpaths
, чтобы сделать работу.Когда я использую .fromstring()
, тогда оба xpaths
, которые я использовал в своем нижнем скребке, работают без сбоев.Однако, когда я выбираю импортировать HTML
из lxml.etree
, выражение xpath Содержит contains()
завершается неудачно.Оказывается, что когда я использую несколько class
имен внутри скребка, он работает, но когда выбираю single class name
из compound class names
, выдается ошибка.
Как мне справиться с такой ситуацией, не используя compound class names
; скорее, используя single class name
следующий .contains()
шаблон или что-то еще?
Это моя попытка:
from lxml.etree import HTML
elements =\
"""
<li class="ProductPrice">
<span class="Regular Price">80.00</span>
</li>
<li class="ProductPrice">
<span class="Regular Price">100.00</span>
</li>
"""
root = HTML(elements)
for item in root.findall(".//*[@class='ProductPrice']"):
# regular = item.find('.//span[@class="Regular Price"]').text
regular = item.find('.//span[contains(@class,"Regular")]').text
print(regular)
Кстати, закомментированный xpath
, используемый в приведенном выше сценарииработает нормально.Но я не могу найти выражение .contains()
, которое выдает следующую ошибку:
Traceback (most recent call last):
File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\SO.py", line 15, in <module>
regular = item.find('.//span[contains(@class,"Regular")]').text
File "src\lxml\etree.pyx", line 1526, in lxml.etree._Element.find
File "src\lxml\_elementpath.py", line 311, in lxml._elementpath.find
File "src\lxml\_elementpath.py", line 300, in lxml._elementpath.iterfind
File "src\lxml\_elementpath.py", line 283, in lxml._elementpath._build_path_iterator
File "src\lxml\_elementpath.py", line 229, in lxml._elementpath.prepare_predicate
SyntaxError: invalid predicate
И последнее: я не хочу использовать compound class names
, потому что немногие веб-сайты производят их динамически.Спасибо.