beautifulsoup: найти все на bs4.элемент.ResultSet объект или список?
Привет, поэтому я применяю find_all на beautifulsoup object
, и найти что-то, что является bs4.element.ResultSet object
или list
.
Я хочу дальше сделать find_all там, но это не разрешено на bs4.element.ResultSet object
. Я могу перебирать каждый элемент bs4.element.ResultSet object
сделать find_all. Но могу ли я избежать цикла и просто преобразовать его обратно в beautifulsoup object
?
см. код для деталей пожалуйста. Спасибо
html_1 = """
<table>
<thead>
<tr class="myClass">
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
</tr>
</thead>
</table>
"""
soup = BeautifulSoup(html_1, 'html.parser')
type(soup) #bs4.BeautifulSoup
# do find_all on beautifulsoup object
th_all = soup.find_all('th')
# the result is of type bs4.element.ResultSet or similarly list
type(th_all) #bs4.element.ResultSet
type(th_all[0:1]) #list
# now I want to further do find_all
th_all.find_all(text='A') #not work
# can I avoid this need of loop?
for th in th_all:
th.find_all(text='A') #works
1 ответов
ResultSet
класс подкласс список, а не Tag
класс, которая имеет find*
методы определения. Цикл через результаты find_all()
является наиболее распространенным подходом:
th_all = soup.find_all('th')
result = []
for th in th_all:
result.extend(th.find_all(text='A'))
как правило, селекторы CSS может помочь вам решить его за один раз, за исключением того, что не все, что вы можете сделать с find_all()
С select()
метод. Например, нет" текстового " поиска, доступного в bs4
селекторы CSS. Но, если, например, вы должны были найти все, скажем,b
внутри th
элементы, вы могли бы сделать:
soup.select("th td")