html中css路径和xpath路径,BeautifulSoup提取XPATH或CSS节点的路径

我想从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('

hello, world!
')

xpath = get_xpath(soup, soup.div.b)

assert '//html/bodydiv/b' == xpath

+1

简答:不,没有现有的方法。你必须自己构建它。 –

2014-09-22 08:31:55

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值