python - 获取 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'})
#...
#...
解决方案
要获得第一个元素,请使用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]
推荐阅读
- c# - 警告:仅从程序集中获得部分类型:Microsoft.Azure.WebJobs.Extensions.Storage
- javascript - 当房间已满时,在voiceRoom中花费的时间并不总是注册 discord.js
- javascript - Firebase 孩子没有被删除,父母是
- git - 如何重置集线器命令以询问用户名和密码
- php - 使用 ajax 将图像数据发送到 php 文件时遇到问题
- python - Tkinter:经过一定时间后如何更新标签文本?
- spring-cloud-dataflow - 流式应用程序不使用 SCDF 服务器环境变量中提供的 buildpack(SCDF 版本 2.1.2)
- spring - 如何为 XmlViewResolver 提供参考 bean
- php - 盒子/喷口没有写满行
- javascript - 拖动 HTML 元素以跟随鼠标光标