С find_all я просто хочу получить данные, которые имеют аргумент - PullRequest
0 голосов
/ 16 января 2020

С помощью find_all я просто хочу получить класс "searchResultsItem", но этот класс поставляется с "searchResultsItem nativeAd classicNativeAd".

только для класса "searchResultsItem", как я могу получить

hepsi = source.find_all("tr",attrs ={"class":"searchResultsItem"})

<tr data-id="754490426" class="searchResultsItem"> ... </tr>
<tr data-id="754490426" class="searchResultsItem"> ... </tr>
<tr data-id="754490426" class="searchResultsItem nativeAd classicNativeAd> ... </tr>
<tr data-id="754490426" class="searchResultsItem"> ... </tr>

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Вы также можете попробовать

hepsi = soup.find_all("tr")
for t in hepsi:
    if len(t['class'])==1:
        print(t)

Вывод:

<tr class="searchResultsItem" data-id="754490426"> ... </tr>
<tr class="searchResultsItem" data-id="754490426"> ... </tr>
<tr class="searchResultsItem" data-id="754490426"> ... </tr>
0 голосов
/ 16 января 2020

Вы можете использовать, например, CSS селектор для фильтрации:

txt = '''<tr data-id="754490426" class="searchResultsItem"> OK1 </tr>
<tr data-id="754490426" class="searchResultsItem"> OK2 </tr>
<tr data-id="754490426" class="searchResultsItem nativeAd classicNativeAd"> NOT OK! </tr>
<tr data-id="754490426" class="searchResultsItem"> OK3 </tr>'''

from bs4 import BeautifulSoup

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

for tr in soup.select('tr.searchResultsItem:not(.nativeAd, .classicNativeAd)'):
    print(tr)

Отпечатки:

<tr class="searchResultsItem" data-id="754490426"> OK1 </tr>
<tr class="searchResultsItem" data-id="754490426"> OK2 </tr>
<tr class="searchResultsItem" data-id="754490426"> OK3 </tr>
...