我想从HTML中提取一些数据,然后能够在客户端突出显示提取的元素而无需修改源html。 XPath或CSS Path对此很好。 可以直接从BeautifulSoup中提取XPATH或CSS路径吗?
现在我使用目标元素的标记,然后lxml lib来提取xpath,这对性能非常不利。我知道BSXPath.py
- 它不适用于BS4。 由于复杂性,重写所有内容以使用本机lxml库的解决方案是不可接受的。BeautifulSoup提取XPATH或CSS节点的路径
import bs4
import cStringIO
import random
from lxml import etree
def get_xpath(soup, element):
_id = random.getrandbits(32)
for e in soup():
if e == element:
e['data-xpath'] = _id
break
else:
raise LookupError('Cannot find {} in {}'.format(element, soup))
content = unicode(soup)
doc = etree.parse(cStringIO.StringIO(content), etree.HTMLParser())
element = doc.xpath('//*[@data-xpath="{}"]'.format(_id))
assert len(element) == 1
element = element[0]
xpath = doc.getpath(element)
return xpath
soup = bs4.BeautifulSoup('<div id=i>hello, <b id=i test=t>world!</b></div>')
xpath = get_xpath(soup, soup.div.b)
assert '//html/bodydiv/b' == xpath
简答:不,没有现有的方法。你必须自己构建它。 – 2014-09-22 08:31:55