首页 > 解决方案 > 获取 bs4.element.ResultSet 对象的第一个元素

问题描述

所以,我正在尝试使用 BeautifulSoup 获取有关网站的信息。问题是,使用 findAll() 我得到一个 bs4.element.ResultSet 对象,我必须遍历它来获取它的元素。但我很确定我只会得到它的一个标签,我不想循环一个只有一个元素的集合。

所以我的问题是我如何只获得 bs4.element.ResultSet 对象的第一个并且可能是唯一的元素?

<div class="textinfo">
   <div class="author">A tale of <span><a href="/profile/89965">Edgar Allan Poe</a></span></div>
   <div class="category">Category: Horror</div>
   <div class="date">Date: 27/11/2008</div>
   <div class="votes">Votes <a href="/text/200811799/votes"><span id="votesmedia">10.00</span></a> </div>
</div>

这些方法在一个类中,这就是我使用“自我”的原因。

def getTales(self):
    talesLinks = self.file.readLinks(self.file.talePath)
    driver = browser.connectChrome()

    for link in talesLinks:
        headerTale = []
        driver.get(link)
        page_source = driver.page_source
        soup = BeautifulSoup(page_source, 'html.parser')

        #Probably I'll get only one div 'textinfo' for each link.
        header = soup.findAll('div', {'class': 'textinfo'})
        self.getHeaderInfo(header, headerTale)

    driver.quit()
    print("chrome headless closed")

def getHeaderInfo(self, header, headerTale):

    # I don't want to loop because I know 'header' has only one element.
    for author in headerTale:
        author = header.findAll('div', {'class', 'author'})
        #...
        #...

标签: pythonbeautifulsoupset

解决方案


要获得第一个元素,请使用find()select_one()

在你的情况下,而不是

header = soup.findAll('div', {'class': 'textinfo'})

尝试以下任一方法。

header = soup.find('div',class_='textinfo')

或者

header = soup.select_one('div.textinfo')

或者

 header = soup.find_all('div',class_='textinfo')[0]

推荐阅读