получить данные из динамического класса = "????" от BS4 - PullRequest
0 голосов
/ 04 сентября 2018

Могу ли я использовать динамический класс, то есть class = "cfBD1" и class = "cfJLC" или class = "????" получить = "данные" из тега?

from bs4 import BeautifulSoup

soup=BeautifulSoup("""<div class="couponTable"><div id="tgCou1" class="tgCoupon couponRow"><span class="spBtnMinus"></span><!-- react-text: 67 -->Wednesday Matches<!-- /react-text --></div><div class="couponRow rAlt1 tgCou1" id="rmid20180905WED1"><img src="/ContentServer/jcbw/images/flag_JLC.gif?CV=L302R1g" alt="Japanese League Cup" title="Japanese League Cup" class="cfJLC"><img src="/ContentServer/jcbw/images/icon_tv-C661.gif?CV=L302R1g" alt="C661-i-CABLE 661 C601-i-CABLE 601" title="C661-i-CABLE 661 C601-i-CABLE 601"></span></span><img src="/football/info/images/btn_odds.gif?CV=L302R1g" alt="All Odds" title="All Odds"></a></div><div class="couponRow rAlt0 tgCou1" id="rmid20180905WED2"><img src="/ContentServer/jcbw/images/flag_JLC.gif?CV=L302R1g" alt="Japanese League Cup" title="Japanese League Cup" class="cfJLC"><img src="/ContentServer/jcbw/images/icon_tv-C662.gif?CV=L302R1g" alt="C662-i-CABLE 662 C602-i-CABLE 602" title="C662-i-CABLE 662 C602-i-CABLE 602"></span></span><img src="/football/info/images/btn_odds.gif?CV=L302R1g" alt="All Odds" title="All Odds"></a></div></div></div><div class="couponRow rAlt1 tgCou1" id="rmid20180905WED12"><img src="/ContentServer/jcbw/images/flag_BD1.gif?CV=L302R1g" alt="Brazilian Division 1" title="Brazilian Division 1" class="cfBD1"><img src="/football/info/images/btn_odds.gif?CV=L302R1g" alt="All Odds" title="All Odds"></a></div></div>""",'html.parser')

lines=soup.find_all('img')
for line in lines:
    print(line['alt'])

Выход:

Japanese League Cup
C661-i-CABLE 661 C601-i-CABLE 601
All Odds
Japanese League Cup
C662-i-CABLE 662 C602-i-CABLE 602
All Odds
Brazilian Division 1
All Odds

Ожидаемый результат:

Japanese League Cup
Japanese League Cup
Brazilian Division 1

1 Ответ

0 голосов
/ 04 сентября 2018

В этом случае вы можете просто проверить, имеет ли тег img атрибут class:

soup.find_all('img', attrs={'class': True})

Пример:

In [1570]: [img['alt'] for img in soup.find_all('img', attrs={'class': True})]
Out[1570]: ['Japanese League Cup', 'Japanese League Cup', 'Brazilian Division 1']

Для полноты, соответствующей любому динамическому значению атрибута, вам нужно найти общий шаблон в именовании, например. в этом случае кажется, что все имена классов начинаются с символа c; Итак, вы можете использовать селектор CSS:

img[class^="c"]

Пример:

In [1571]: [img['alt'] for img in soup.select('img[class^="c"]')]
Out[1571]: ['Japanese League Cup', 'Japanese League Cup', 'Brazilian Division 1']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...