基于背景色的网页抓取html行?

2024-10-01 07:40:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前还不熟悉使用Python进行web抓取。如图所示,这是示例HTML代码

<div class="bb-fl" style="background:Tomato;width:0.63px" title="10">​</div>,
<div class="bb-fl" style="background:SkyBlue;width:0.19px" title="3">​</div>,
<div class="bb-fl" style="background:Tomato;width:1.14px" title="18">​</div>,
<div class="bb-fl" style="background:SkyBlue;width:0.19px" title="3">​</div>,
<div class="bb-fl" style="background:Tomato;width:1.52px" title="24">​</div>,

我想使用beautifulsoup查找具有相同类别(bb fl)的线路,并且仅返回具有:style=“background:SkyBlue”的线路

目前,我已经知道了如何返回所有包含“bb fl”类的HTML代码行,如下所示

soup.find_all('div',{'class':'bb-fl'})

Tags: 代码divwebtitlestylehtmlwidth线路
3条回答

您可以在此处使用一些正则表达式逻辑来实现这一点:

from bs4 import BeautifulSoup
import re

html = """<div class="bb-fl" style="background:Tomato;width:0.63px" title="10">​</div>,
<div class="bb-fl" style="background:SkyBlue;width:0.19px" title="3">​</div>,
<div class="bb-fl" style="background:Tomato;width:1.14px" title="18">​</div>,
<div class="bb-fl" style="background:SkyBlue;width:0.19px" title="3">​</div>,
<div class="bb-fl" style="background:Tomato;width:1.52px" title="24">​</div>,"""

soup = BeautifulSoup(html)

#Find all divs which style attribute contains ...
soup.find_all('div', style = re.compile("background:SkyBlue"))

结果:

[<div class="bb-fl" style="background:SkyBlue;width:0.19px" title="3">​</div>,
 <div class="bb-fl" style="background:SkyBlue;width:0.19px" title="3">​</div>]

无论其他样式值是什么,它都会起作用

试试这个

soup = BeautifulSoup(data, 'lxml')
bbfls = soup.find_all('div',{'class':'bb-fl'})
for bbfl in bbfls:
    if "background:SkyBlue" in bbfl.attrs.get("style"):
        print(bbfl.attrs)

如果您希望将其放在一行中,请尝试以下操作:

soup = BeautifulSoup(data, 'lxml')
print([bbfl.attrs for bbfl in soup.find_all('div',{'class':'bb-fl'}) if "background:SkyBlue" in bbfl.attrs.get("style")])

输出

{'class': ['bb-fl'], 'style': 'background:SkyBlue;width:0.19px', 'title': '3'}
{'class': ['bb-fl'], 'style': 'background:SkyBlue;width:0.19px', 'title': '3'}

您可以根据documentation尝试以下操作

soup.find_all('div', attrs={'style':'background:SkyBlue'})

相关问题 更多 >