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


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.