gpt4 book ai didi

python - 如何提取其中包含特定元素的所有 div,它不是 class、span、a 或 li?

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:30 25 4
gpt4 key购买 nike

我正在尝试从具有以下许多 div 的网页中提取(显然所有数据都不同,除了初始部分):

<div data-asin="B007R2E578" data-index="0" 
class="sg-col-20-of-24 s-result-item sg-col-0-of-12 sg-col-28-of-32 sg-col-16-of-20 AdHolder sg-col sg-col-32-of-36 sg-col-12-of-16 sg-col-24-of-28">
<div class="sg-col-inner">

所有这些 div,以相同的方式开始:<div data-asin=

我正在尝试使用 Beautifulsoup 中的 find_all 函数提取所有这些:

structure = soup.find_all('div','data-asin=')

但是它总是返回一个空列表。

我不想使用正则表达式。

BeautifulSoup 中是否有任何函数可以获取所有这些 div?

最佳答案

您可以使用 CSS 选择器 div[data-asin] (选择所有 <div>,其中存在 data-asin 属性):

data = '''<div data-asin="B007R2E578" data-index="0"
class="sg-col-20-of-24 s-result-item sg-col-0-of-12 sg-col-28-of-32 sg-col-16-of-20 AdHolder sg-col sg-col-32-of-36 sg-col-12-of-16 sg-col-24-of-28">
<div class="sg-col-inner">
SOME DATA
</div>
</div>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'lxml')

for div in soup.select('div[data-asin]'):
print(div['data-asin'], div.get_text(strip=True))

打印:

B007R2E578 SOME DATA

进一步阅读:

CSS Selector Reference

编辑:从亚马逊获取一些数据:

from bs4 import BeautifulSoup
import requests

url = 'https://www.amazon.com/s?k=iron&ref=nb_sb_noss_2'
headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0'}

soup = BeautifulSoup(requests.get(url, headers=headers).text, 'lxml')

for div in soup.select('div[data-asin]'):
print(div['data-asin'])
if div.select_one('.a-price'):
print(div.select_one('.a-price ').get_text('|',strip=True).split('|')[0])
if div.select_one('.a-text-normal'):
print(div.select_one('.a-text-normal').text)

打印:

B004ILTH1K
$62.81

Rowenta DW5080 1700-Watt Micro Steam Iron Stainless Steel Soleplate with Auto-Off, 400-Hole, Brown

B00OL5P1G8
$21.99

Sunbeam Steam Master 1400 Watt Mid-size Anti-Drip Non-Stick Soleplate Iron with Variable Steam control and 8' Retractable Cord, Black/Blue, GCSBCL-202-000

...etc.

关于python - 如何提取其中包含特定元素的所有 div,它不是 class、span、a 或 li?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56964475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com