Веб скрести html строк на основе цвета фона? - PullRequest
0 голосов
/ 17 апреля 2020

В настоящее время я новичок в просмотре веб-страниц с Python. Как показано, это пример 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 "

В настоящее время я выяснил, как вернуть все строки кода HTML, которые имеют класс" bb-fl ", со следующей строкой.

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

Ответы [ 3 ]

1 голос
/ 17 апреля 2020

Вы можете достичь этого, используя некоторые регулярные выражения logi c здесь:

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>]

Это будет работать независимо от других значений стиля.

0 голосов
/ 17 апреля 2020

Попробуйте это

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'}
0 голосов
/ 17 апреля 2020

Вы можете попробовать следующее в соответствии с документацией

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