সুন্দর স্যুপ এবং আইডি দ্বারা একটি ডিভ এবং এর সামগ্রীগুলি বের করা


147
soup.find("tagName", { "id" : "articlebody" })

কেন এটি এর মধ্যে <div id="articlebody"> ... </div>ট্যাগ এবং স্টাফ ফেরত দেয় না ? এটি কিছুই দেয় না। এবং আমি জানি এটি একটি বাস্তবতার জন্যই আছে কারণ আমি এখান থেকে একে একে ঘুরে দেখছি

soup.prettify()

soup.find("div", { "id" : "articlebody" }) এছাড়াও কাজ করে না।

( সম্পাদনা: আমি দেখতে পেয়েছি যে বিউটিফুলসপ আমার পৃষ্ঠাটি সঠিকভাবে পার্স করছে না, যার অর্থ সম্ভবত আমি যে পৃষ্ঠাটি পার্স করার চেষ্টা করছিলাম সেটি এসজিএমএলে বা যেকোন কিছুতে ফর্ম্যাট করা হয়নি)


(আপনার সম্পাদনা অনুসারে, এই প্রশ্নের এখনও অন্যদের কাছে পুনরায় ব্যবহারযোগ্য সংস্থান হিসাবে মূল্য রয়েছে, এমনকি যদি পার্সার আপনার নির্দিষ্ট পৃষ্ঠায় কাজ না করে)
স্মি

উত্তর:


202

আপনার উদাহরণ দস্তাবেজ পোস্ট করা উচিত, কারণ কোডটি দুর্দান্ত কাজ করে:

>>> import BeautifulSoup
>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div id="articlebody"> ... </div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>

ফাইন্ডিং <div>গুলি ভিতরে <div>পাশাপাশি গুলি কাজ:

>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div><div id="articlebody"> ... </div></div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>

2
আমার উদাহরণ নথি প্রচুর। আমি সমস্যাটি সন্ধান করছি - আমি মনে করি এটি ডিভের ডিভসের উপর কাজ করে না। প্রিন্ট লেন (স্যুপ ('ডিভ')) দিয়ে ডকুমেন্টে কতগুলি ডিভ রয়েছে তা আমি একটি গণনা করেছি যার ফলস্বরূপ 10 হয়েছে এবং আমি পরিষ্কারভাবে ফায়ারব্যাগের সাথে 10 ডিভের বেশি দেখতে পাচ্ছি। সুতরাং আমি মনে করি এটি ডিভের মধ্যে কেবল ডিভগুলি খুঁজে পাচ্ছে না, তাই আমার মোড়কে মোড়ক দিয়ে জিনিসগুলি সঙ্কুচিত করা দরকার।
টনি স্টার্ক

8
ঠিক আছে, তাহলে আপনার প্রশ্নের উত্তর দেওয়া অসম্ভব, স্ফটিক বলগুলি ডিবাগ করার একটি নির্ভরযোগ্য উপায় নয়। :)
লুকা লালিনস্কে

1
আমি এই কোড চেষ্টা করেছিলাম। ডিভের <এমবেড> রয়েছে এবং আমি এর ভিতরে এমবেড প্রিন্ট করতে পারি না।
ভিনসেন্ট

13
বা আরও সহজভাবেdiv = soup.find(id="articlebody")
jfs

4
বাsoup.find('div', id='articlebody')
ট্রেভর বয়ড স্মিথ

71

এর দ্বারা কোনও উপাদান সন্ধান করতে id:

div = soup.find(id="articlebody")

15

সুন্দর স্যুপ 4 পদ্ধতিটির সাহায্যে বেশিরভাগ সিএসএস নির্বাচককে সমর্থন করে , সুতরাং আপনি কোনও নির্বাচক যেমন ব্যবহার করতে পারেন :.select()id

soup.select('#articlebody')

আপনি যদি উপাদানটির ধরণ নির্দিষ্ট করতে চান তবে আপনি নির্বাচকের আগে প্রকারের নির্বাচক যুক্ত করতে পারেন id:

soup.select('div#articlebody')

.select()পদ্ধতি যার অর্থ হল যে এটা নিম্নলিখিত হিসাবে একই ফলাফল ফিরে আসবে উপাদানের একটি সংগ্রহ, ফিরে আসবে .find_all()পদ্ধতি উদাহরণ:

soup.find_all('div', id="articlebody")
# or
soup.find_all(id="articlebody")

আপনি যদি কেবল একটি একক উপাদান নির্বাচন করতে চান তবে আপনি কেবল .find()পদ্ধতিটি ব্যবহার করতে পারেন :

soup.find('div', id="articlebody")
# or
soup.find(id="articlebody")

13

আমি মনে করি যখন 'ডিভ' ট্যাগগুলি খুব বেশি নেস্ট করে তখন কোনও সমস্যা আছে। আমি একটি ফেসবুক এইচটিএমএল ফাইল থেকে কিছু পরিচিতি পার্স করার চেষ্টা করছি, এবং বিউটিফুলসপ "ডিভি" "ক্লাস" ফন্টের সাথে "ট্যাগগুলি খুঁজে পাচ্ছে না।

এটি অন্যান্য ক্লাসগুলির সাথেও ঘটে। আমি যখন ডিভগুলি সাধারণভাবে অনুসন্ধান করি তখন এটি কেবল সেইগুলিতে পরিণত হয় যা এতটা নেস্টেড নয়।

এইচটিএমএল সোর্স কোডটি আপনার কোনও বন্ধুর (আপনার বন্ধুদের একটি নয়) এর বন্ধুদের তালিকার ফেসবুক থেকে যে কোনও পৃষ্ঠা হতে পারে। যদি কেউ এটি পরীক্ষা করে কিছু পরামর্শ দিতে পারে তবে আমি সত্যিই এটির প্রশংসা করব।

এটি আমার কোড, যেখানে আমি ক্লাস "ফন্টেন্ট" সহ "ডিভ" ট্যাগগুলির সংখ্যা মুদ্রণের চেষ্টা করি:

from BeautifulSoup import BeautifulSoup 
f = open('/Users/myUserName/Desktop/contacts.html')
soup = BeautifulSoup(f) 
list = soup.findAll('div', attrs={'class':'fcontent'})
print len(list)

9

সম্ভবত সম্ভবত ডিফল্ট সুন্দরসুপ পার্সারের সমস্যা রয়েছে। 'LxML' এর মতো একটি আলাদা পার্সার পরিবর্তন করুন এবং আবার চেষ্টা করুন।


এটি আমার জন্য কাজ করেছে, ধন্যবাদ! আমি ব্যবহার করেছিsoup = BeautifulSoup(data, parser="html.parser")
উইল-হার্ট

8

সুন্দরী সপ উত্সে এই লাইনটি ডিভগুলিকে ডিভের মধ্যে বাসা বাঁধার অনুমতি দেয়; সুতরাং lukas মন্তব্য আপনার উদ্বেগ বৈধ হবে না।

NESTABLE_BLOCK_TAGS = ['blockquote', 'div', 'fieldset', 'ins', 'del']

আমার মনে হয় আপনার যা করা দরকার তা হ'ল আপনি যেমন চান তেমন অ্যাটর্সগুলি নির্দিষ্ট করা

source.find('div', attrs={'id':'articlebody'})

5

আপনি চেষ্টা করেছেন soup.findAll("div", {"id": "articlebody"})?

পাগল শোনায়, তবে আপনি যদি বন্য থেকে জিনিসগুলি স্ক্র্যাপ করছেন তবে আপনি একাধিক ডিভাইস অস্বীকার করতে পারবেন না ...


4

আমি ব্যবহার করতাম:

soup.findAll('tag', attrs={'attrname':"attrvalue"})

অনুসন্ধান / অনুসন্ধানের জন্য আমার বাক্য গঠন হিসাবে; বলেছিল, ট্যাগ এবং বৈশিষ্ট্য তালিকার মধ্যে অন্য optionচ্ছিক পরামিতি না থাকলে, এটি আলাদা হওয়া উচিত নয়।


4

গুগলকে স্ক্র্যাপ করার চেষ্টা করার সময় আমার কাছেও ঘটেছিল।
আমি পাইকারি ব্যবহার করে শেষ করেছি।
ইনস্টল করুন:

pip install pyquery

ব্যবহার করুন:

from pyquery import PyQuery    
pq = PyQuery('<html><body><div id="articlebody"> ... </div></body></html')
tag = pq('div#articlebody')

3

এখানে একটি কোড খণ্ড

soup = BeautifulSoup(:"index.html")
titleList = soup.findAll('title')
divList = soup.findAll('div', attrs={ "class" : "article story"})

আপনি দেখতে পাচ্ছেন যে আমি সমস্ত ট্যাগগুলি খুঁজে পেয়েছি এবং তারপরে আমি ভিতরে সমস্ত শ্রেণি = "নিবন্ধ" সহ সমস্ত ট্যাগগুলি পেয়েছি


0

Idসম্পত্তি সবসময় স্বতন্ত্র চিহ্নিত করা হয়। এর অর্থ আপনি উপাদানটি নির্দিষ্ট না করেই সরাসরি ব্যবহার করতে পারেন। অতএব, যদি আপনার উপাদানগুলিতে সামগ্রীর মাধ্যমে পার্স করা যায় তবে এটি একটি প্লাস পয়েন্ট।

divEle = soup.find(id = "articlebody")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.