Соскребание тд элементов с цветом фона стиля BeautifulSoup - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь проанализировать веб-страницу, где я хочу очистить элементы "tr", которые также имеют атрибут bgcolor. Ниже приведен HTML-код для веб-страницы:

<table cellspacing="0" cellpadding="15" id="MainContent_GridView1" style="color:#333333;border-collapse:collapse;">
    <tr style="color:White;background-color:#045D99;font-weight:bold;">
        <th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$name&#39;)" style="color:White;">ORGANIZATION NAME</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$state&#39;)" style="color:White;">STATE</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$year&#39;)" style="color:White;">YEAR</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$rt&#39;)" style="color:White;">FORM</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$pc&#39;)" style="color:White;">PAGES</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$ta&#39;)" style="color:White;">TOTAL ASSETS</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$ein&#39;)" style="color:White;">EIN</a></th>
    </tr><tr style="color:#333333;background-color:#ECEEF2;">
        <td><a href="//990s.foundationcenter.org/990_pdf_archive/231/231352298/231352298_201702_990.pdf">Zoological Society of Philadelphia Philadelphia Zoo</a></td><td>PA</td><td>2017</td><td>990   </td><td align="right">68</td><td align="right">$124,163,973.00</td><td style="white-space:nowrap;">23-1352298</td>
    </tr><tr style="color:#333333;background-color:White;">
        <td><a href="//990s.foundationcenter.org/990_pdf_archive/231/231352298/231352298_201602_990.pdf">Zoological Society of Philadelphia</a></td><td>PA</td><td>2016</td><td>990   </td><td align="right">61</td><td align="right">$125,008,026.00</td><td style="white-space:nowrap;">23-1352298</td>
    </tr><tr style="color:#333333;background-color:#ECEEF2;">
        <td><a href="//990s.foundationcenter.org/990_pdf_archive/231/231352298/231352298_201502_990.pdf">Zoological Society of Philadelphia</a></td><td>PA</td><td>2015</td><td>990   </td><td align="right">63</td><td align="right">$131,880,929.00</td><td style="white-space:nowrap;">23-1352298</td>
    </tr>
</table>

Я пытаюсь очистить элементы tr с помощью элемента style

style="color:White;background-color:#045D99;font-weight:bold;"

Ниже мой код:

import requests
from bs4 import BeautifulSoup
data = requests.get(url).text
soup = BeautifulSoup(data,"lxml")
elems = soup.find_all('tr',style"color:White;background-color:#045D99;font-weight:bold;")

Однако мои элементы возвращаются пустыми. Также в моем элементе супа, я вижу, что:

style="color:White;background-color:#045D99;font-weight:bold;"

изменилось на

<tr bgcolor="#ECEEF2">

Я не уверен, что это является причиной проблемы, также есть ли способ очистить целые таблицы вместо фрейма данных панд?

Edit:

У меня в коде была опечатка, ниже приведен правильный код:

soup.find_all('tr',{"style":"color:White;background-color:#045D99;font-weight:bold;"})

То же, что указано в ответах, но все равно я получаю нулевые результаты

Еще одно редактирование:

Даже после предложений я все еще получаю нулевые результаты. HTML ниже веб-страницы:

http://990finder.foundationcenter.org/990results.aspx?990_type=&fn=AMERICAN+HEART+ASSOCIATION&st=&zp=&ei=&fy=&action=Search

Я пытаюсь разобрать таблицу, присутствующую на веб-странице

Ответы [ 3 ]

0 голосов
/ 05 июня 2019

Ваш синтаксис выключен. Изменить на это:

elems = soup.find_all('tr', {"style":"color:White;background-color:#045D99;font-weight:bold;"})

Полный код:

data = '''<table cellspacing="0" cellpadding="15" id="MainContent_GridView1" style="color:#333333;border-collapse:collapse;">
    <tr style="color:White;background-color:#045D99;font-weight:bold;">
        <th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$name&#39;)" style="color:White;">ORGANIZATION NAME</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$state&#39;)" style="color:White;">STATE</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$year&#39;)" style="color:White;">YEAR</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$rt&#39;)" style="color:White;">FORM</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$pc&#39;)" style="color:White;">PAGES</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$ta&#39;)" style="color:White;">TOTAL ASSETS</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$ein&#39;)" style="color:White;">EIN</a></th>
    </tr><tr style="color:#333333;background-color:#ECEEF2;">
        <td><a href="//990s.foundationcenter.org/990_pdf_archive/231/231352298/231352298_201702_990.pdf">Zoological Society of Philadelphia Philadelphia Zoo</a></td><td>PA</td><td>2017</td><td>990   </td><td align="right">68</td><td align="right">$124,163,973.00</td><td style="white-space:nowrap;">23-1352298</td>
    </tr><tr style="color:#333333;background-color:White;">
        <td><a href="//990s.foundationcenter.org/990_pdf_archive/231/231352298/231352298_201602_990.pdf">Zoological Society of Philadelphia</a></td><td>PA</td><td>2016</td><td>990   </td><td align="right">61</td><td align="right">$125,008,026.00</td><td style="white-space:nowrap;">23-1352298</td>
    </tr><tr style="color:#333333;background-color:#ECEEF2;">
        <td><a href="//990s.foundationcenter.org/990_pdf_archive/231/231352298/231352298_201502_990.pdf">Zoological Society of Philadelphia</a></td><td>PA</td><td>2015</td><td>990   </td><td align="right">63</td><td align="right">$131,880,929.00</td><td style="white-space:nowrap;">23-1352298</td>
    </tr>
</table>'''


import requests
from bs4 import BeautifulSoup
#data = requests.get(url).text
soup = BeautifulSoup(data,"lxml")
elems = soup.find_all('tr', {"style":"color:White;background-color:#045D99;font-weight:bold;"})
0 голосов
/ 05 июня 2019

Я приму вас буквально. background-color является не атрибутом, а частью значения атрибута style. Предполагая, что вам нужна та, которая содержит эту подстроку (и, возможно, для разных цветов), мы можем использовать оператор содержит, *, чтобы сопоставить style значение атрибута

html = '''<table cellspacing="0" cellpadding="15" id="MainContent_GridView1" style="color:#333333;border-collapse:collapse;">
    <tr style="color:White;background-color:#045D99;font-weight:bold;">
        <th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$name&#39;)" style="color:White;">ORGANIZATION NAME</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$state&#39;)" style="color:White;">STATE</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$year&#39;)" style="color:White;">YEAR</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$rt&#39;)" style="color:White;">FORM</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$pc&#39;)" style="color:White;">PAGES</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$ta&#39;)" style="color:White;">TOTAL ASSETS</a></th><th scope="col"><a href="javascript:__doPostBack(&#39;ctl00$MainContent$GridView1&#39;,&#39;Sort$ein&#39;)" style="color:White;">EIN</a></th>
    </tr><tr style="color:#333333;background-color:#ECEEF2;">
        <td><a href="//990s.foundationcenter.org/990_pdf_archive/231/231352298/231352298_201702_990.pdf">Zoological Society of Philadelphia Philadelphia Zoo</a></td><td>PA</td><td>2017</td><td>990   </td><td align="right">68</td><td align="right">$124,163,973.00</td><td style="white-space:nowrap;">23-1352298</td>
    </tr><tr style="color:#333333;background-color:White;">
        <td><a href="//990s.foundationcenter.org/990_pdf_archive/231/231352298/231352298_201602_990.pdf">Zoological Society of Philadelphia</a></td><td>PA</td><td>2016</td><td>990   </td><td align="right">61</td><td align="right">$125,008,026.00</td><td style="white-space:nowrap;">23-1352298</td>
    </tr><tr style="color:#333333;background-color:#ECEEF2;">
        <td><a href="//990s.foundationcenter.org/990_pdf_archive/231/231352298/231352298_201502_990.pdf">Zoological Society of Philadelphia</a></td><td>PA</td><td>2015</td><td>990   </td><td align="right">63</td><td align="right">$131,880,929.00</td><td style="white-space:nowrap;">23-1352298</td>
    </tr>
</table>'''


import requests
from bs4 import BeautifulSoup as bs
soup = bs(html,"lxml")
trs = soup.select('tr[style*=";background-color:"]')
0 голосов
/ 05 июня 2019

Изменяя последнюю строку вашего кода:

soup.find_all('tr',{"style":"color:White;background-color:#045D99;font-weight:bold;"})

вы получаете:

[<tr style="color:White;background-color:#045D99;font-weight:bold;">
 <th scope="col"><a href="javascript:__doPostBack('ctl00$MainContent$GridView1','Sort$name')" style="color:White;">ORGANIZATION NAME</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$MainContent$GridView1','Sort$state')" style="color:White;">STATE</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$MainContent$GridView1','Sort$year')" style="color:White;">YEAR</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$MainContent$GridView1','Sort$rt')" style="color:White;">FORM</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$MainContent$GridView1','Sort$pc')" style="color:White;">PAGES</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$MainContent$GridView1','Sort$ta')" style="color:White;">TOTAL ASSETS</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$MainContent$GridView1','Sort$ein')" style="color:White;">EIN</a></th>
 </tr>]

Относительно вашего последнего вопроса, предполагая, что t хранит html таблицыпроценты, вы можете конвертировать его в DataFrame, используя pandas.read_html:

import pandas as pd

df = pd.read_html(t)

display(df[0])

В вашем случае вы получите:

                  ORGANIZATION NAME   STATE YEAR    FORM PAGES  TOTAL ASSETS       EIN
0   Zoological Society of Philadelphia  PA  2017    990    68   $124,163,973.00 23-1352298
1   Zoological Society of Philadelphia  PA  2016    990    61   $125,008,026.00 23-1352298
2   Zoological Society of Philadelphia  PA  2015    990    63   $131,880,929.00 23-1352298
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...