নাপ, বিউটিফুলসুপ নিজে থেকে এক্সপাথ এক্সপ্রেশন সমর্থন করে না।
একটি বিকল্প গ্রন্থাগার, lxml , না সমর্থন জন্য XPath 1.0। এটির একটি বিউটিফুলসপ সামঞ্জস্যপূর্ণ মোড রয়েছে যেখানে এটি স্যুপের মতো ভাঙ্গা এইচটিএমএলকে চেষ্টা এবং বিশ্লেষণ করবে। যাইহোক, ডিফল্ট lxML এইচটিএমএল পার্সার ভাঙা এইচটিএমএল পার্স করার ঠিক ততটাই ভাল কাজ করে এবং আমি বিশ্বাস করি এটি দ্রুত faster
একবার আপনি আপনার ডকুমেন্টকে একটি এলএক্সএমএল গাছে পার্স করার পরে, .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.