首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在BS4中使用findAll创建列表

在BS4中使用findAll创建列表
EN

Stack Overflow用户
提问于 2017-07-31 16:25:44
回答 1查看 6.1K关注 0票数 2

我首先要说的是,我对Python比较陌生。我最近一直在开发一个Slack机器人,这就是我到目前为止的进展。

代码语言:javascript
运行
复制
source = requests.get(url).content
soup = BeautifulSoup(source, 'html.parser')
price = soup.findAll("a", {"class":"pricing"})["quantity"]

这是我想要抓取的HTML代码。

代码语言:javascript
运行
复制
<a class="pricing" saleprice="240.00" quantity="1" added="2017-01-01"> S </a>
<a class="pricing" saleprice="21.00" quantity="5" added="2017-03-14"> M </a>
<a class="pricing" saleprice="139.00" quantity="19" added="2017-06-21"> L </a>

当我只使用soup.find()时,我能够找到第一个量值,但是我需要在一个列表中包含所有的量值。我考虑过使用一个不同的库,比如lxml,而不是bs4,但也没有任何成功的机会。任何帮助都非常感谢,因为我已经在这上面花了很长时间了。

EN

回答 1

Stack Overflow用户

发布于 2017-07-31 16:39:54

findAll方法返回一个bs4 Tag元素列表,因此不能直接选择属性。但是,您可以使用简单的列表理解从该迭代表中的项中选择属性。

代码语言:javascript
运行
复制
price = [a.get("quantity") for a in soup.findAll("a", {"class":"pricing"})] 

请注意,在访问属性时最好使用get,因为如果键在attrs字典中不存在,它将返回None (或者您可以设置默认值)。

正如Jon Clements所指出的,如果你不想你的列表中有数量项,你可以通过“None”和“quantity”进行过滤,以防某些项没有“quantity”属性。

代码语言:javascript
运行
复制
price = [a["quantity"] for a in soup.find_all("a", {"class":"pricing", "quantity":True})] 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45410774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档