সুন্দরী স্যুপের সাথে একটি অ্যাট্রিবিউট মান বের করা


111

আমি ওয়েবপৃষ্ঠায় একটি নির্দিষ্ট "ইনপুট" ট্যাগের মধ্যে একটি একক "মান" বৈশিষ্ট্যের সামগ্রীটি বের করার চেষ্টা করছি। আমি নিম্নলিখিত কোড ব্যবহার করি:

import urllib
f = urllib.urlopen("http://58.68.130.147")
s = f.read()
f.close()

from BeautifulSoup import BeautifulStoneSoup
soup = BeautifulStoneSoup(s)

inputTag = soup.findAll(attrs={"name" : "stainfo"})

output = inputTag['value']

print str(output)

আমি একটি টাইপরর পেয়েছি: তালিকা সূচকগুলি অবশ্যই পূর্ণসংখ্যার হতে হবে, স্ট্রিং নয়

যদিও বিউটিসুপ ডকুমেন্টেশন থেকে আমি বুঝতে পারি যে স্ট্রিংগুলি এখানে সমস্যা হওয়া উচিত নয় ... তবে আইআইএ কোনও বিশেষজ্ঞ এবং আমি ভুল বুঝতে পারি না।

কোন পরামর্শ ব্যাপকভাবে প্রশংসা করা হয়! আগাম ধন্যবাদ.

উত্তর:


150

.find_all() সমস্ত পাওয়া উপাদানগুলির তালিকা ফেরত দেয়, সুতরাং:

input_tag = soup.find_all(attrs={"name" : "stainfo"})

input_tagএটি একটি তালিকা (সম্ভবত কেবলমাত্র একটি উপাদান রয়েছে)। আপনি যা চান ঠিক তার উপর নির্ভর করে আপনার করা উচিত:

 output = input_tag[0]['value']

বা ব্যবহার .find()পদ্ধতি যা কেবলমাত্র একটি (প্রথম) পাওয়া উপাদানটি দেয়:

 input_tag = soup.find(attrs={"name": "stainfo"})
 output = input_tag['value']

দুর্দান্ত জিনিস! ধন্যবাদ। এখন আউটপুটটি পার্সিং সম্পর্কে আমার একটি প্রশ্ন রয়েছে যা অ-এসসিআইআই অক্ষরের দীর্ঘ গুচ্ছ তবে আমি এটি একটি পৃথক প্রশ্নে জিজ্ঞাসা করব।
বার্নাবে

3
স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 2616659/ … অনুযায়ী 'মান' অ্যাক্সেস করা উচিত নয় । এই ক্ষেত্রে উপরের কোডটি কী কাজ করে? আমি ভেবেছিলাম আপনার দ্বারা মানটি অ্যাক্সেস করতে হবেoutput = inputTag[0].contents
শেঠ

@ শেঠ - না, কারণ তিনি ইনপুট-ট্যাগের বৈশিষ্ট্য 'মান' সন্ধান করছেন, এবং। বিষয়বস্তু ট্যাগ দ্বারা এনক্যাপুলেটেড পাঠ্যটি ফেরত দেয় (<স্প্যান> আমি। বিষয়বস্তু </ span>) - (কেবল এখনই উত্তর দিচ্ছি কারণ আমার ছিল যা চলছে তার দ্বিগুণ পরীক্ষা করার জন্য; অন্য কারও উপকারে আসতে পারে)
দোলন অ্যান্টিনিচি

1
দুর্দান্ত উত্তর যাইহোক, আমি ট্যাগটির কোনও মান চিহ্ন হিসাবে কোনও পয়েন্টার রোধ করার inputTag[0].get('value') পরিবর্তে ব্যবহার করবinputTag[0]['value']
উভচর

ওয়েবসাইটগুলি দেখার ওয়েবসাইটের হোমপৃষ্ঠায় সরাসরি লিঙ্কযুক্ত নয় এমন লিঙ্কগুলির বিষয়ে কীভাবে, ওয়েবপৃষ্ঠায় প্রত্যক্ষ বা পরোক্ষভাবে লিঙ্কযুক্ত কিনা সমস্ত লিঙ্ক কীভাবে পাবেন।
রিঙ্ক 16

26

ইন Python 3.x, get(attr_name)আপনি যে ট্যাগ ট্যাগটি ব্যবহার করছেন তা কেবল ব্যবহার করুন find_all:

xmlData = None

with open('conf//test1.xml', 'r') as xmlFile:
    xmlData = xmlFile.read()

xmlDecoded = xmlData

xmlSoup = BeautifulSoup(xmlData, 'html.parser')

repElemList = xmlSoup.find_all('repeatingelement')

for repElem in repElemList:
    print("Processing repElem...")
    repElemID = repElem.get('id')
    repElemName = repElem.get('name')

    print("Attribute id = %s" % repElemID)
    print("Attribute name = %s" % repElemName)

এক্সএমএল ফাইলের conf//test1.xmlমতো যা দেখতে লাগে:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <singleElement>
        <subElementX>XYZ</subElementX>
    </singleElement>
    <repeatingElement id="11" name="Joe"/>
    <repeatingElement id="12" name="Mary"/>
</root>

কপি করে প্রিন্ট:

Processing repElem...
Attribute id = 11
Attribute name = Joe
Processing repElem...
Attribute id = 12
Attribute name = Mary

আমি যদি পিইপি 8 অনুসরণ করার জন্য আরও আধুনিক স্ট্রিং বিন্যাসের পদ্ধতিগুলি ব্যবহার করতে এটি সম্পাদনা করি তবে আপনি কি আপত্তি করবেন?
এএমসি

এটি দুর্দান্ত, এর জন্য যান
উভচর

6

আপনি যদি উপরের উত্স থেকে বৈশিষ্ট্যের একাধিক মান পুনরুদ্ধার করতে চান তবে findAllআপনার প্রয়োজনীয় সমস্ত কিছু পেতে আপনি একটি তালিকা বোধগম্যতা ব্যবহার করতে পারেন :

import urllib
f = urllib.urlopen("http://58.68.130.147")
s = f.read()
f.close()

from BeautifulSoup import BeautifulStoneSoup
soup = BeautifulStoneSoup(s)

inputTags = soup.findAll(attrs={"name" : "stainfo"})
### You may be able to do findAll("input", attrs={"name" : "stainfo"})

output = [x["stainfo"] for x in inputTags]

print output
### This will print a list of the values.

4

আমি আপনাকে আসলে একটি সময় সাশ্রয় করার উপায়টি এই ধরণে ধরে নিয়ে যাব যে আপনি কীভাবে ট্যাগগুলি জানেন যে সেই বৈশিষ্ট্যগুলি রয়েছে suggest

ধরা যাক যে একটি ট্যাগ xyz এর সেই অ্যাট্রিটিউব "স্টেইনিনফো" আছে ..

full_tag = soup.findAll("xyz")

এবং আমি আপনাকে বুঝতে চাই না যে ফুল_ট্যাগটি একটি তালিকা

for each_tag in full_tag:
    staininfo_attrb_value = each_tag["staininfo"]
    print staininfo_attrb_value

সুতরাং আপনি সব ট্যাগ xyz এর জন্য স্টেইনিনফো এর সমস্ত সংক্ষিপ্ত মূল্যগুলি পেতে পারেন


3

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

import requests
from bs4 import BeautifulSoup
import csv

url = "http://58.68.130.147/"
r = requests.get(url)
data = r.text

soup = BeautifulSoup(data, "html.parser")
get_details = soup.find_all("input", attrs={"name":"stainfo"})

for val in get_details:
    get_val = val["value"]
    print(get_val)

এটি ইতিমধ্যে এখানে থাকা অনেক পুরানো উত্তরগুলির থেকে কীভাবে আলাদা?
এএমসি

0

আমি নির্দিষ্ট উপাদানগুলির সমস্ত শ্রেণীর বৈশিষ্ট্যের মান পেতে এটি বিউটিলসাপ 4.8.1 এর সাথে ব্যবহার করছি:

from bs4 import BeautifulSoup

html = "<td class='val1'/><td col='1'/><td class='val2' />"

bsoup = BeautifulSoup(html, 'html.parser')

for td in bsoup.find_all('td'):
    if td.has_attr('class'):
        print(td['class'][0])

এটি উল্লেখ করা গুরুত্বপূর্ণ যে অ্যাট্রিবিউট কীটির একটিমাত্র মান থাকে এমনকি এমনকি অ্যাট্রিবিউট কী একটি তালিকা পুনরুদ্ধার করে।

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