পাইথন: বিউটিফুলসুপ - নামের অ্যাট্রিবিউটের ভিত্তিতে একটি অ্যাট্রিবিউট মানটি পান


98

আমি এর নামের উপর ভিত্তি করে একটি গুণাবলী মুদ্রণ করতে চাই, উদাহরণস্বরূপ নিন

<META NAME="City" content="Austin">

আমি এরকম কিছু করতে চাই

soup = BeautifulSoup(f) //f is some HTML containing the above meta tag
for meta_tag in soup('meta'):
    if meta_tag['name'] == 'City':
         print meta_tag['content']

উপরের কোডটি একটি দেয় KeyError: 'name', আমি বিশ্বাস করি এটি হ'ল কারণ নামটি বিটিফুলসপ ব্যবহার করেছেন যাতে এটি কীওয়ার্ড আর্গুমেন্ট হিসাবে ব্যবহার করা যায় না।

উত্তর:


162

এটি বেশ সহজ, নিম্নলিখিতটি ব্যবহার করুন -

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<META NAME="City" content="Austin">')
>>> soup.find("meta", {"name":"City"})
<meta name="City" content="Austin" />
>>> soup.find("meta", {"name":"City"})['content']
u'Austin'

কিছু পরিষ্কার না হলে একটি মন্তব্য দিন।


4
আমি কীভাবে এটি করতে পারি যদি আমি এখনই সমস্ত দৃষ্টান্ত খুঁজতে চাই, যেমন এখনই স্যুপ.ফাইন্ড ("মেটা", {"নাম": "শহর"}) ['বিষয়বস্তু'] প্রথম ফলাফল দেয় তবে বলে যে অন্যটি ছিল স্যুপ ছিল লাইন <meta NAME এর = 'শহর "বিষয়বস্তু =" সান ফ্রান্সিস্কো "> কিভাবে আমি কোডটি তাই পরিবর্তন পারে আমি পেতে চাই যে।' অস্টিন 'এবং' সান ফ্রান্সিসকো '?
overflowname

4
প্রাচীন প্রশ্ন হচ্ছে, কিন্তু এখানে অন্য ক্ষেত্রে যেকোন একটি সহজ সমাধান এটি খুঁজছেন আসে রয়েছে: soup.findAll("meta", {"name":"City"})['content']। এটি সমস্ত ঘটনা ফিরে আসবে।
হ্যানন সিজার

আমি কীভাবে একটি নির্দিষ্ট বৈশিষ্ট্যের মান পেতে পারি? মানে আমার কেবল বৈশিষ্ট্য আছে ...
ফণীেন্দ্র চর্যুলু কান্দুরী

এর মধ্যে কী uআছে u'Austin?
ওয়েবনুব 13

এছাড়াও মূল ত্রুটি ['সামগ্রী']
পেয়েছে

28

থারহাস্টে প্রশ্নের উত্তর দিয়েছিল তবে এখানে একই জিনিসটি করার আরেকটি উপায়। এছাড়াও, আপনার উদাহরণে আপনার ক্যাপগুলিতে NAME রয়েছে এবং আপনার কোডে আপনার ছোট হাতের অক্ষরে নাম রয়েছে।

s = '<div class="question" id="get attrs" name="python" x="something">Hello World</div>'
soup = BeautifulSoup(s)

attributes_dictionary = soup.find('div').attrs
print attributes_dictionary
# prints: {'id': 'get attrs', 'x': 'something', 'class': ['question'], 'name': 'python'}

print attributes_dictionary['class'][0]
# prints: question

print soup.find('div').get_text()
# prints: Hello World

ক্ষেত্রে মেলে না probably এই ক্ষেত্রে: বিউটিফুলসপ ('<মেটা নাম = "শহর" সামগ্রী = "অস্টিন">') <মেটা সামগ্রী = "অস্টিন" নাম = "শহর" />
টাকার্মি

9

পার্টিতে 6 বছর দেরি হয়ে গেছে তবে আমি কীভাবে এইচটিএমএল উপাদানটির ট্যাগ বৈশিষ্ট্য মানটি বের করতে পারি তা অনুসন্ধান করছি:

<span property="addressLocality">Ayr</span>

আমি "ঠিকানা লোকেশন" চাই। আমি এখানে ফিরে যেতে থাকি, কিন্তু উত্তরগুলি আমার সমস্যার সমাধান করে নি।

আমি কীভাবে শেষ পর্যন্ত এটি পরিচালনা করেছিলাম:

>>> from bs4 import BeautifulSoup as bs

>>> soup = bs('<span property="addressLocality">Ayr</span>', 'html.parser')
>>> my_attributes = soup.find().attrs
>>> my_attributes
{u'property': u'addressLocality'}

এটি একটি ডিক হিসাবে, আপনি তারপরে আবার keys' মান'ও ব্যবহার করতে পারেন

>>> my_attributes.keys()
[u'property']
>>> my_attributes.values()
[u'addressLocality']

আশা করি এটি অন্য কাউকে সাহায্য করবে!


8

নিম্নলিখিত কাজগুলি:

from bs4 import BeautifulSoup

soup = BeautifulSoup('<META NAME="City" content="Austin">', 'html.parser')

metas = soup.find_all("meta")

for meta in metas:
    print meta.attrs['content'], meta.attrs['name']

7

থারস্টেস্টের উত্তরটি সেরা সমাধান, তবে এফওয়াইআই আপনি যে সমস্যার মুখোমুখি হয়েছিলেন তা হ'ল বিউটিফুল স্যুপের একটি ট্যাগ অবজেক্ট পাইথন অভিধানের মতো কাজ করে। যদি আপনি কোনও ট্যাগে ['নাম'] অ্যাক্সেস করেন যা কোনও 'নাম' বৈশিষ্ট্য না রাখে, আপনি একটি কীআরআর পাবেন।


1

এই সমাধানটিও কেউ চেষ্টা করতে পারেন:

সারণীর ফাঁকে লেখা মানটি

এইচটিএমএল কনটেন্ট


<table>
    <tr>
        <th>
            ID
        </th>
        <th>
            Name
        </th>
    </tr>


    <tr>
        <td>
            <span name="spanId" class="spanclass">ID123</span>
        </td>

        <td>
            <span>Bonny</span>
        </td>
    </tr>
</table>

পাইথন কোড


soup = BeautifulSoup(htmlContent, "lxml")
soup.prettify()

tables = soup.find_all("table")

for table in tables:
   storeValueRows = table.find_all("tr")
   thValue = storeValueRows[0].find_all("th")[0].string

   if (thValue == "ID"): # with this condition I am verifying that this html is correct, that I wanted.
      value = storeValueRows[1].find_all("span")[0].string
      value = value.strip()

      # storeValueRows[1] will represent <tr> tag of table located at first index and find_all("span")[0] will give me <span> tag and '.string' will give me value

      # value.strip() - will remove space from start and end of the string.

     # find using attribute :

     value = storeValueRows[1].find("span", {"name":"spanId"})['class']
     print value
     # this will print spanclass

1
If tdd='<td class="abc"> 75</td>'
In Beautifulsoup 

if(tdd.has_attr('class')):
   print(tdd.attrs['class'][0])


Result:  abc

4
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
শোনাকদে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.