Как использовать Beautifulsoup, чтобы отфильтровать все «цветные» слова, которые я хочу от html - PullRequest
0 голосов
/ 01 мая 2020

У меня есть html код, который выглядит следующим образом:

<TR>
<TD><P>1-A3</P></TD>
<TD><P>9007320896</P></TD>
<TD><P>140739389</P></TD>
<TD><P>9003911104</P></TD>
<TD><P>140686111</P></TD>
<TD><P>140686111(1-A4)</P></TD>
<TD><P>0</P></TD>
<TD><P>0</P></TD>
</TR>
<TR>
<TD><P><B><FONT COLOR="#FF0000">1-B1</FONT></B></P></TD>
<TD><P><B><FONT COLOR="#FF0000">8799053184</FONT></B></P></TD>
<TD><P><B><FONT COLOR="#FF0000">137485206</FONT></B></P></TD>
</TR>

Я хочу использовать python для извлечения всего текста, выделенного красным жирным шрифтом

Ответы: [1-B1,8799053184,137485206]

Это мой код, я не знаю, почему он не работает

from bs4 import BeautifulSoup
html_doc = """
file_example = open (html_doc)
soup = BeautifulSoup(file_example, 'html.parser')
result2 = soup.findAll('b')
result2 = soup.findAll('font')
bold = soup.select('p', 'b', {'color':'#FF0000'})
haha = list(map(lambda tag: tag.text, bold))
print(haha)

1 Ответ

1 голос
/ 01 мая 2020

Вы можете использовать .select() для получения жирных тегов с тегом дочернего шрифта с атрибутом цвета # FF0000.

html = '''<TR>
<TD><P>1-A3</P></TD>
<TD><P>9007320896</P></TD>
<TD><P>140739389</P></TD>
<TD><P>9003911104</P></TD>
<TD><P>140686111</P></TD>
<TD><P>140686111(1-A4)</P></TD>
<TD><P>0</P></TD>
<TD><P>0</P></TD>
</TR>
<TR>
<TD><P><B><FONT COLOR="#FF0000">1-B1</FONT></B></P></TD>
<TD><P><B><FONT COLOR="#FF0000">8799053184</FONT></B></P></TD>
<TD><P><B><FONT COLOR="black">this is black</FONT></B></P></TD>
<TD><P><B><FONT COLOR="#FF0000">137485206</FONT></B></P></TD>
<TD><P><B><FONT COLOR="BLUE">Also Not Red</FONT></B></P></TD>
</TR>'''

from bs4 import BeautifulSoup
html_doc = html

soup = BeautifulSoup(html_doc, 'html.parser')

bold_red = soup.select('b > font[color="#FF0000"]')

haha = [ each.text for each in bold_red ]
print (haha)

Вывод:

['1-B1', '8799053184', '137485206']
...