首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python BeautifulSoup -将<b>标记文本提取到数组中

Python BeautifulSoup -将<b>标记文本提取到数组中
EN

Stack Overflow用户
提问于 2018-08-02 08:22:00
回答 2查看 3.3K关注 0票数 0

我尝试将一个特定类(其中有多个实例)中的b标记的文本提取到一个数组中。我正在和BeautifulSoup 4Python 3一起做这件事。

我正在尝试网页抓取this页面。这就是我的代码目前的样子。

代码语言:javascript
复制
def cattest():
    subcat = soup.find_all('span', {"class": "zg_hrsr_ladder"})[x].findChildren()
    for i, child in enumerate(subcat):
        categories = child.text
        print(categories)

for x in range(0, len(cat)):
    cattest()

这将产生以下输出:

代码语言:javascript
复制
Beauty & Personal Care
Hair Care
Hair Care Products
Conditioners
Conditioners
Beauty & Personal Care
Personal Care
Personal Care

我想做的是从zg_hrsr_ladder元素的b标记中获取文本,并将它们放入一个数组中。那么预期的结果将是:

代码语言:javascript
复制
[Conditioners, Personal Care]

任何关于我如何实现这个目标的帮助都将是非常有帮助的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-02 08:41:42

您可以使用列表理解并将'b'添加到findChildren的参数中

代码语言:javascript
复制
In [59]: [element.text for s in soup.find_all('span', {"class": "zg_hrsr_ladder"}) for element in s.findChildren('b')]
Out[59]: ['Conditioners', 'Personal Care']

这相当于

代码语言:javascript
复制
In [63]: res = []

In [64]: for s in soup.find_all('span', {"class": "zg_hrsr_ladder"}):
    ...:     for element in s.findChildren('b'):
    ...:         res.append(element.text)
    ...:

In [65]: res
Out[65]: ['Conditioners', 'Personal Care']
票数 2
EN

Stack Overflow用户

发布于 2018-08-02 11:42:02

有很多方法可以做到这一点。这里是其中的两个。从这两项中选择一项:

代码语言:javascript
复制
from bs4 import BeautifulSoup
import requests

url = "https://www.amazon.ca/Abba-Moisture-Conditioner-Unisex-33-8-Ounce/dp/B000VZS3VW/ref=sr_1_1/145-7226897-1893421?ie=UTF8&qid=1532712550&sr=8-1&keywords=B000VZS3VW"

res = requests.get(url)
soup = BeautifulSoup(res.text,"lxml")

#using .find_next()
subcat = [item.find_next("b").text for item in soup.find_all('span', class_='zg_hrsr_ladder')]
print(subcat)

#using selector
subcat = [item.text for item in soup.select('span.zg_hrsr_ladder > b')]
print(subcat)

它们都会产生相同的结果:

代码语言:javascript
复制
['Conditioners', 'Personal Care']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51643947

复制
相关文章

相似问题

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