嗨,所以我在一个beautifulsoup object上应用find ou all,然后找到一些东西,它是一个bs4.element.ResultSet object或一个list
我想在里面找到所有的,但是在一个bs4.element.ResultSet object上是不允许的。我可以循环遍历bs4.element.ResultSet object的每个元素以查找所有元素。但是我可以避免循环并将其转换回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

最佳答案

ResultSet类是列表的子类,而不是定义了Tag方法的find* class类。循环通过find_all()的结果是最常见的方法:

th_all = soup.find_all('th')
result = []
for th in th_all:
    result.extend(th.find_all(text='A'))

通常,CSS selectors可以帮助您一次性解决问题,但使用find_all()方法并不能解决所有问题。例如,select()css选择器中没有“文本”搜索。但是,例如,如果必须在bs4元素中找到所有的元素,例如,b元素,则可以执行以下操作:
soup.select("th td")

关于python - beautifulsoup:find_all on bs4.element.ResultSet对象还是列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36076052/

10-09 19:10