2017-03-06 2 views

Antwort

0

Suchen Sie alle mithilfe von Lambda und suchen Sie nach einem bestimmten Attributwert oder wenn eine Klasse den gewünschten Wert enthält.

from bs4 import BeautifulSoup 

example = """<div class="cake">1</div> 
<h2 id="cake">1</div> 
<sometag someattribute="cake">1</div>""" 

soup = BeautifulSoup(example, "html.parser") 

print (soup.find_all(lambda tag: [a for a in tag.attrs.values() if a == "cake" or "cake" in tag.get("class")])) 

Ausgänge:

[<div class="cake">1</div>, <h2 id="cake">1</h2>, <sometag someattribute="cake">1</sometag>] 
0

Sie könnten regex und BeautifulSoup zusammen verwenden. Das ist meine schreckliche Skript:

r = '''<div class="cake">1</div> 
<h2 id="cake">1</div> 
<sometag someattribute="cake">1</div>''' 

import re 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(r, 'lxml') 

for i in range(len(re.findall(r'(\w+)="cake"',str(soup)))-1): 
    print(soup.find_all(re.compile(r'(\w+)'), {(re.findall(pattern,str(soup)))[i]:'cake'})) 

Der Ausgang:

[<div class="cake">1</div>] 
[<h2 id="cake">1 </div> 
<sometag someattribute="cake">1</sometag></h2>] 
Verwandte Themen