我有一个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
这也不起作用。
我在哪里错了?或针对上述问题的正确解决方案是什么?
答案 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']