नहींं, सुंदरसुपे, स्वयं के द्वारा, XPath अभिव्यक्तियों का समर्थन नहीं करता है।
एक वैकल्पिक पुस्तकालय, lxml , XPath 1.0 का समर्थन करता है । इसमें एक ब्यूटीफुल कम्पेटिबल मोड है जहाँ यह कोशिश करेगा और टूटे हुए एचटीएमएल को सोप करेगा। हालाँकि, डिफ़ॉल्ट lxml HTML parser टूटी हुई HTML को पार्स करने का अच्छा काम करता है, और मुझे विश्वास है कि यह तेज़ है।
एक बार आपने अपने दस्तावेज़ को एक lxml पेड़ में डाल दिया, तो आप .xpath()
तत्वों को खोजने के लिए विधि का उपयोग कर सकते हैं ।
try:
# Python 2
from urllib2 import urlopen
except ImportError:
from urllib.request import urlopen
from lxml import etree
url = "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
response = urlopen(url)
htmlparser = etree.HTMLParser()
tree = etree.parse(response, htmlparser)
tree.xpath(xpathselector)
एक समर्पित मॉड्यूल भी हैlxml.html()
अतिरिक्त कार्यक्षमता के साथ ।
ध्यान दें कि उपरोक्त उदाहरण में मैंने response
ऑब्जेक्ट को सीधे पास कर दिया है lxml
, क्योंकि स्ट्रीम से सीधे पढ़ने वाले पार्सर को पहले बड़े स्ट्रिंग में प्रतिक्रिया पढ़ने की तुलना में अधिक कुशल है। requests
पुस्तकालय के साथ ऐसा ही करने के लिए , आप पारदर्शी परिवहन अपघटन को सक्षम करने के बाद ऑब्जेक्ट stream=True
में सेट और पास करना चाहते हैं :response.raw
import lxml.html
import requests
url = "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
response = requests.get(url, stream=True)
response.raw.decode_content = True
tree = lxml.html.parse(response.raw)
आपके लिए संभावित रुचि सीएसएस चयनकर्ता समर्थन है ; CSSSelector
वर्ग xPath अभिव्यक्ति में सीएसएस बयान तब्दील हो, के लिए अपनी खोज कर रही है td.empformbody
कि बहुत आसान:
from lxml.cssselect import CSSSelector
td_empformbody = CSSSelector('td.empformbody')
for elem in td_empformbody(tree):
# Do something with these table cells.
चक्र पूरा आ रहा है: BeautifulSoup ही है बहुत पूरा हो CSS चयनकर्ता समर्थन :
for cell in soup.select('table#foobar td.empformbody'):
# Do something with these table cells.