我想從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