का सीएसएस पथ मैं HTML से कुछ डेटा निकालना चाहता हूं और फिर स्रोत HTML को संशोधित किए बिना क्लाइंट पक्ष पर निकाले गए तत्वों को हाइलाइट करने में सक्षम होना चाहिए। और XPath या CSS पथ इसके लिए बहुत अच्छा लग रहा है। क्या सुंदरसूप से सीधे XPATH या CSS पथ निकालना संभव है?
अभी मैं लक्ष्य तत्व के अंकन का उपयोग करता हूं और फिर xpath निकालने के लिए lxml lib का उपयोग करता हूं, जो प्रदर्शन के लिए बहुत खराब है। मुझे BSXPath.py
के बारे में पता है - यह बीएस 4 के साथ काम नहीं करता है। मूल lxml lib का उपयोग करने के लिए सबकुछ पुनर्लेखन के साथ समाधान जटिलता के कारण स्वीकार्य नहीं है।सुंदर सूप XPATH निकालें या नोड
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
संक्षिप्त उत्तर: नहीं, इसके लिए कोई मौजूदा विधि नहीं है। आपको इसे स्वयं बनाना होगा। –