BeautifulSoup-获取属性的所有值

时间:2018-07-07 18:59:06

标签: python web-scraping beautifulsoup

我有一个HTML标记,如下所示:-

function fetch_data($limit, $offset=0)  
        {  
        $this->db->limit($limit,$offset);

        $query = $this->db->get('prlaps');
        return $query; 

如何获取<div class="a b c" some-attribute="1"> <div><div> </div> <div class="a b c" some-attribute="2"> <div><div> </div> <div class="a b c" some-attribute="3"> <div><div> </div> 的所有值的列表?

我已经尽力了,但是没有任何解决办法。

这是我尝试过的。

类似于查找所有href some-attribute,我尝试过

[a['href'] for a in soup.find_all('a', href=True)]

我也尝试过:-

[div['some-attribute'] for div in soup.find_all('div', some-attribute=True)]  # syntax error

这也不起作用。

我在哪里错了?或针对上述问题的正确解决方案是什么?

3 个答案:

答案 0 :(得分:0)

使用字典查找所有div:soup.find_all('div', {"some-attribute" : True})

[x.get_attribute_list('some-attribute') for x in soup.find_all('div', {"some-attribute" : True})]

输出:

[['1'], ['2'], ['3']]

平面列表或您需要的任何内容。

答案 1 :(得分:0)

您可以使用has_attr("some-attribute")来检查标签是否具有您的属性。

演示:

s = """<div class="a b c" some-attribute="1">
    <div><div>
</div>

<div class="a b c" some-attribute="2">
    <div><div>
</div>

<div class="a b c" some-attribute="3">
    <div><div>
</div>

<div class="a b c">
    <div><div>
</div>"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(s, "html.parser")
res = [i.attrs["some-attribute"] for i in soup.find_all("div", class_ = "a b c") if i.has_attr("some-attribute")]
print(res)

输出:

[u'1', u'2', u'3']

答案 2 :(得分:-1)

您可以指定要搜索的div类:

import re
vals = [i['some-attribute'] for i in soup(content, 'html.parser').find_all('div', {'class':re.compile('someclass\d+')})]

输出:

['1', '2', '3']