Python: BeautifulSoup - get an attribute value based on the name attribute

后端 未结 7 1763
抹茶落季
抹茶落季 2020-11-27 10:38

I want to print an attribute value based on its name, take for example


I want to do something

相关标签:
7条回答
  • 2020-11-27 11:15
    If tdd='<td class="abc"> 75</td>'
    In Beautifulsoup 
    
    if(tdd.has_attr('class')):
       print(tdd.attrs['class'][0])
    
    
    Result:  abc
    
    0 讨论(0)
  • 2020-11-27 11:16

    theharshest answered the question but here is another way to do the same thing. Also, In your example you have NAME in caps and in your code you have name in lowercase.

    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
    
    0 讨论(0)
  • 2020-11-27 11:16

    One can also try this solution :

    To find the value, which is written in span of table

    htmlContent


    <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>
    

    Python code


    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
    
    0 讨论(0)
  • 2020-11-27 11:17

    6 years late to the party but I've been searching for how to extract an html element's tag attribute value, so for:

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

    I want "addressLocality". I kept being directed back here, but the answers didn't really solve my problem.

    How I managed to do it eventually:

    >>> 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'}
    

    As it's a dict, you can then also use keys and 'values'

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

    Hopefully it helps someone else!

    0 讨论(0)
  • 2020-11-27 11:21

    It's pretty simple, use the following -

    >>> 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'
    

    Leave a comment if anything is not clear.

    0 讨论(0)
  • 2020-11-27 11:33

    The following works:

    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']
    
    0 讨论(0)
提交回复
热议问题