所以我可能有一个标签,例如:
<p class=MsoNormal style='margin-top:0cm;margin-right:5.5pt;margin-bottom:.6pt;
margin-left:2.05pt'>bla bla bla</p>
我希望能够按margin-right:5pt
请提取具有这种样式的任何标签。
目前,我有以下代码,但未提取任何内容:
p_tag = name.find_all('p', {'style':'margin-right:5.5pt'})
print(p_tag)
这里是我拥有的更多html代码:
<h1 style='margin-top:0cm;margin-right:1.75pt;margin-bottom:.25pt;margin-
left:-.25pt'>Some header tag </h1>
<p class=MsoNormal style='margin:0cm;margin-bottom:.0001pt;text-indent:0cm;
line-height:107%'> </p>
<p class=MsoNormal style='margin-top:0cm;margin-right:5.5pt;margin-bottom:.6pt;
margin-left:2.05pt'>Some name<i>some place they work</i>
</p>
<p class=MsoNormal style='margin-top:0cm;margin-right:0cm;margin-bottom:1.2pt;
margin-left:0cm;text-indent:0cm;line-height:107%'> </p>
<p class=MsoNormal style='margin-top:0cm;margin-right:5.5pt;margin-bottom:.6pt;
margin-left:2.05pt'>short description about the person</p>
<p class=MsoNormal style='margin-top:0cm;margin-right:5.5pt;margin-bottom:4.5pt;
margin-left:2.05pt'>some more info...</p>
我可以合并所有带有特定边距的p标签,直到<h1>
标签再次出现吗?
答案 0 :(得分:1)
您使用的是完全匹配,但您打算进行部分匹配。尝试以下方法:
p_tag = name.find_all('p', {'style': lambda s: 'margin-right:5.5pt' in s})
print(p_tag)
答案 1 :(得分:0)
您可以使用if语句
from bs4 import BeautifulSoup
html = ''' <p class=MsoNormal style='margin-top:0cm;margin-right:5.5pt;margin-bottom:.6pt;margin-left:2.05pt'>bla bla bla</p>'''
soup = BeautifulSoup(html, 'html.parser')
p_tag = soup.find_all('p')[0]['style']
if 'margin-right:5.5pt' in p_tag:
print(p_tag)
else:
print('Not found')
输出:
margin-top:0cm;margin-right:5.5pt;margin-bottom:.6pt;margin-left:2.05pt
答案 2 :(得分:0)
BeautifulSoup对CSS selectors using the .select
method有很好的支持。 CSS具有selecting elements based on attribute values的一些相当强大的方式。
在您的情况下,您希望选择具有属性style
包含 margin-right:5.5pt
的元素,可以将其写为CSS选择器[style*='margin-right:5.5pt']
。
结合这些知识,可以为您的问题提供解决方案:
from bs4 import BeautifulSoup
html = '''
<p class=MsoNormal style='margin-top:0cm;margin-right:5.5pt;margin-bottom:.6pt;margin-left:2.05pt'>test1</p>
<p class=MsoNormal style='margin-top:0cm;margin-bottom:.6pt;margin-left:2.05pt'>test2</p>
<p class=MsoNormal style='margin-top:0cm;margin-right:5pt;margin-bottom:.6pt;margin-left:2.05pt'>test3</p>
'''
soup = BeautifulSoup(html)
[el.extract() for el in soup.select("[style*='margin-right:5.5pt']")]
print(soup.prettify())
哪个会给出以下输出:
<p class="MsoNormal" style="margin-top:0cm;margin-bottom:.6pt;margin-left:2.05pt">test2</p>
<p class="MsoNormal" style="margin-top:0cm;margin-right:5pt;margin-bottom:.6pt;margin-left:2.05pt">test3</p>