微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用漂亮的汤将div属性从这些行中提取出来?

如何解决如何用漂亮的汤将div属性从这些行中提取出来?

我正在使用bs4提取网页的html,并将每一行拆分为一个列表,以便我可以提取所需的内容。 (不知道此步骤是否可以通过更改数据类型来使下一个步骤变得不可能,如果这样,执行此步骤的更好方法是什么?)

一旦有了这个缩小的列表,我剩下的单个列表元素如下:

忽略第一个 之后的空格,否则我无法显示

< div class="row srpVehicle hasvehicleInfo" data-bodystyle="SUV" data-cpo="False" data-engine="V8 engine" data-extcolor="Red" data-extcolorcode="" data-fueltype="Gasoline Fuel" data-intcolor="Jet Black" data-intcolorcode="" data-make="Chevrolet" data-model="Tahoe" data-modelcode="1123706" data-mpgcity="16" data-mpghwy="20" data-msrp="0" data-name="2020 Chevrolet Tahoe LT" data-price="58995" data-stocknum="32948" data-trans="Automatic" data-trim="LT" data-vehicleid="0" data-vehicletype="new" data-vin="1G555555555" data-year="2020" id="srpVehicle-1GNS555513555">

我想提取每个数据点; data-bodystyle,data-engine,data-model等,然后将它们放入字典中,稍后再转换为json。

输出示例:

{'data-bodystyle':'SUV','data-engine':'V8','data-model':'Tahoe'}

有没有更简单的方法可以使用bs4方法完成此任务?当前,当我缩小范围时,我使用字符串拆分和其他一些操作来拉取数据点,但这似乎无法有效地工作。

解决方法

每个标签都具有.attrs属性,该属性存储标签的所有属性。您可以像标准Python的字典一样对其进行迭代:

from pprint import pprint
from bs4 import BeautifulSoup

txt = '''<div class="row srpVehicle hasVehicleInfo" data-bodystyle="SUV" data-cpo="False" data-engine="V8 engine" data-extcolor="Red" data-extcolorcode="" data-fueltype="Gasoline Fuel" data-intcolor="Jet Black" data-intcolorcode="" data-make="Chevrolet" data-model="Tahoe" data-modelcode="1123706" data-mpgcity="16" data-mpghwy="20" data-msrp="0" data-name="2020 Chevrolet Tahoe LT" data-price="58995" data-stocknum="32948" data-trans="Automatic" data-trim="LT" data-vehicleid="0" data-vehicletype="new" data-vin="1G555555555" data-year="2020" id="srpVehicle-1GNS555513555">'''
soup = BeautifulSoup(txt,'html.parser')

out = {}
div = soup.select_one('.hasVehicleInfo')
for a in div.attrs:
    if a.startswith('data-'):
        out[a.replace('data-','')] = div[a]   # if you want to keep `data-...`,remove `.replace()`

# pretty print to screen:
pprint(out)

打印:

{'bodystyle': 'SUV','cpo': 'False','engine': 'V8 engine','extcolor': 'Red','extcolorcode': '','fueltype': 'Gasoline Fuel','intcolor': 'Jet Black','intcolorcode': '','make': 'Chevrolet','model': 'Tahoe','modelcode': '1123706','mpgcity': '16','mpghwy': '20','msrp': '0','name': '2020 Chevrolet Tahoe LT','price': '58995','stocknum': '32948','trans': 'Automatic','trim': 'LT','vehicleid': '0','vehicletype': 'new','vin': '1G555555555','year': '2020'}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。