কেবলমাত্র কয়েকটি নির্দিষ্ট বৈশিষ্ট্য সহ ট্যাগগুলি কীভাবে সন্ধান করবেন - বিউটিফুলসপ


87

আমি কীভাবে, বিউটিফুলসপ ব্যবহার করে কেবলমাত্র যে বৈশিষ্ট্যগুলি অনুসন্ধান করি সেগুলি সহ ট্যাগগুলি অনুসন্ধান করব?

উদাহরণস্বরূপ, আমি সমস্ত <td valign="top">ট্যাগ সন্ধান করতে চাই ।

নিম্নলিখিত কোড: raw_card_data = soup.fetch('td', {'valign':re.compile('top')})

আমি চাই সমস্ত ডেটা পেয়ে যায়, তবে <td>বৈশিষ্ট্যযুক্ত যে কোনও ট্যাগও ধরবেvalign:top

আমি চেষ্টা করেছিলাম: raw_card_data = soup.findAll(re.compile('<td valign="top">')) এবং এটি কিছুই দেয় না (সম্ভবত খারাপ রেজেক্সের কারণে)

আমি ভাবছিলাম যে "বিউটিফুলসপ" বলার কোনও উপায় আছে কিনা " <td>ট্যাগগুলি সন্ধান করুন যার একমাত্র বৈশিষ্ট্যটি valign:top"

আরও আপডেট করুন উদাহরণস্বরূপ, যদি কোনও এইচটিএমএল নথিতে নিম্নলিখিত <td>ট্যাগ থাকে:

<td valign="top">.....</td><br />
<td width="580" valign="top">.......</td><br />
<td>.....</td><br />

আমি ফিরে আসার জন্য কেবল প্রথম <td>ট্যাগ ( <td width="580" valign="top">) চাই

উত্তর:


98

বিউটিফুলসুপ ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে

আপনি এটি ব্যবহার করতে পারেন:

soup = BeautifulSoup(html)
results = soup.findAll("td", {"valign" : "top"})

সম্পাদনা:

যে ট্যাগগুলিতে কেবল ভ্যালেন = "শীর্ষ" বৈশিষ্ট্য রয়েছে তা ফিরিয়ে দিতে আপনি ট্যাগ বৈশিষ্ট্যের দৈর্ঘ্য পরীক্ষা করতে পারেন attrs:

from BeautifulSoup import BeautifulSoup

html = '<td valign="top">.....</td>\
        <td width="580" valign="top">.......</td>\
        <td>.....</td>'

soup = BeautifulSoup(html)
results = soup.findAll("td", {"valign" : "top"})

for result in results :
    if len(result.attrs) == 1 :
        print result

যে ফিরে:

<td valign="top">.....</td>

জুলি.এলগ্রিয়াতে আমার মন্তব্য অনুসারে, এটি <tr>এই বৈশিষ্ট্যের সাথে সমস্ত ট্যাগগুলি খুঁজে পাবে valign="top", অন্যান্য বৈশিষ্ট্যযুক্তগুলি সহ ( এই সন্ধানেও <td width="580" valign="top">ফিরে আসবে) আমি <tr>ট্যাগগুলি অনুসন্ধান করার জন্য একটি পদ্ধতি খুঁজছি যার একমাত্র বৈশিষ্ট্যটি হ'লvalign="top"
স্ক্যান্সিব

সুতরাং, আপনি লেন পরীক্ষা করতে পারেন (ট্যাগ.্যাটার্স)। যদি লেন (ট্যাগ.আত্তার্স)> 1, ট্যাগটিকে উপেক্ষা করুন (আমি আমার পোস্ট সম্পাদনা করেছি)
লৌক জি।

52

ডকুমেন্টেশনে বর্ণিত হিসাবে আপনি lambdaফাংশন ব্যবহার করতে পারেন । যাতে আপনার ক্ষেত্রে কেবল নিম্নলিখিত ব্যবহারের সাথে ট্যাগ অনুসন্ধান করা যায় :findAlltdvalign = "top"

td_tag_list = soup.findAll(
                lambda tag:tag.name == "td" and
                len(tag.attrs) == 1 and
                tag["valign"] == "top")

4
এটি বিএস এর সম্পূর্ণ শক্তি ব্যবহার করে বলে সেরা উত্তর
রাফায়েল টি

4
দুর্দান্ত উত্তর কারণ এটি আপনাকে খুব অনুকূলিত্রে ফল দেয়।
ক্রেজিজিক

33

আপনি যদি কোনও মান সহ কেবল অ্যাট্রিবিউট নামের সাথে অনুসন্ধান করতে চান তবে

from bs4 import BeautifulSoup
import re

soup= BeautifulSoup(html.text,'lxml')
results = soup.findAll("td", {"valign" : re.compile(r".*")})

স্টিভ লরিমার অনুযায়ী রিজেসের পরিবর্তে ট্রু পাস করা ভাল

results = soup.findAll("td", {"valign" : True})

4
আপনি পরে একটি প্রথম বন্ধনী মিস করছেন r".*", এর ফলে এটি সংকলন হয় না।
জ্যাক কোল

11
নিয়মিত প্রকাশের প্রয়োজন নেই, কেবল পাস করুন True:results = soup.findAll("td", {"valign" : True})
স্টিভ লরিমার

17

এটি করার সহজতম উপায় হ'ল নতুন সিএসএস শৈলী selectপদ্ধতি:

soup = BeautifulSoup(html)
results = soup.select('td[valign="top"]')

যদি আমি আগে থেকে মানটি না জানি, এবং কেবল ভ্যালিন বৈশিষ্ট্যযুক্ত ট্যাগটি সন্ধান করতে চাই তবে কী হবে?
মাসায়ো মিউজিক

4
@ মাশায়ো মিউজিক আপনি সমস্ত <td> 'ভালাইন' বৈশিষ্ট্যযুক্ত বাছাই করতে স্যুপ.সलेक्ट ('টিডি [ভালাইন]') করতে পারেন। 'ভালাইন' বৈশিষ্ট্যযুক্ত সমস্ত উপাদান নির্বাচন করতে আপনি ট্যাগের নামটিও বাদ দিতে পারেন
এলবেন

4

এটি কেবল যুক্তি হিসাবে পাস করুন findAll:

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("""
... <html>
... <head><title>My Title!</title></head>
... <body><table>
... <tr><td>First!</td>
... <td valign="top">Second!</td></tr>
... </table></body><html>
... """)
>>>
>>> soup.findAll('td')
[<td>First!</td>, <td valign="top">Second!</td>]
>>>
>>> soup.findAll('td', valign='top')
[<td valign="top">Second!</td>]

4
: কি যদি তাই মত ট্যাগ নেই <td width="580" valign="top">? আমি valign="top"
এগুলি

2

ক্রিস রেডফোর্ড এবং আমরের উত্তরের সংমিশ্রণ যুক্ত করে, আপনি নির্বাচিত কমান্ডের সাহায্যে কোনও মান সহ কোনও বৈশিষ্ট্যের নাম অনুসন্ধান করতে পারেন:

from bs4 import BeautifulSoup as Soup
html = '<td valign="top">.....</td>\
    <td width="580" valign="top">.......</td>\
    <td>.....</td>'
soup = Soup(html, 'lxml')
results = soup.select('td[valign]')

আমিও একইভাবে চেষ্টা করেছি কিন্তু এটি কাজ করছে না, কোনও কর্মক্ষেত্র আছে?
ফণীেন্দ্র চর্যুলু কান্দুরী

4
@ ফণীেন্দ্রচরুলুকান্দুরী দুঃখিত, কোডটিতে একটি খারাপ কোডিং ত্রুটি ছিল। এখন কপি এবং পেস্ট কাজ করা উচিত!
গ্রিজিং সায়েন্টিস্ট

0

যে কোনও ট্যাগে একটি গুণাবলী ব্যবহার করে তা সন্ধান করুন

<th class="team" data-sort="team">Team</th>    
soup.find_all(attrs={"class": "team"}) 

<th data-sort="team">Team</th>  
soup.find_all(attrs={"data-sort": "team"}) 
 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.