python - 使用正则表达式查找字符串模式并将结果附加到列表中
问题描述
我是一个re
在 Python 上使用库的菜鸟。我正在做 Web Scraping,我想匹配一些字符串模式并将值附加到列表中。例如:
parking = []
rooms = []
toilets = []
attribute = soup.find('ul',{'class':'specs-list'}).find_all('li')
for a in attribute:
print(a.text)
输出索引为 0 的迭代 a
Metters
50 m�
Rooms
2
Toilets
1
输出索引为 1 的迭代 a
Metters
50 m�
parking
1
spends
340
因此,例如,我想匹配标题的名称,如果存在于 A 值上,我想将结果附加到每个列表中
伪代码:
for a in attribute:
if a contains "Rooms":
rooms.append(a)
if a contains "Parking":
parking.append(a)
if a contains "toilets":
parking.append(a)
if a not contains strings above:
rooms.append(nan)
parking.append(nan)
rooms.append(nan)
我使用 BeautifulSoup 创建网页抓取,属性值的结果如下:
索引 0 的属性变量输出:
[<li class="specs-item">
<strong>Metters</strong>
<span>50 m�</span>
</li>,<li class="specs-item">
<strong>Rooms</strong>
<span>2</span>
</li>,<li class="specs-item">
<strong>Toilets</strong>
<span>1</span>
</li>,<li class="specs-item">
<strong>Spends</strong>
<span>340</span></li>]
一个属性的长度为 0f 5 个值,每个值的代码都与上述相似,但标题和值不同,有人包含停车场、房间、厕所,其他人只有厕所和房间,等等。
解决方案
这应该可以帮助你:
from bs4 import BeautifulSoup
import requests
parking = []
rooms = []
toilets = []
html = requests.get('website url').text
soup = BeautifulSoup(html,'html.parser')
attribute = soup.find_all('li',{'class':'specs-item'})
for a in attribute:
heading = a.strong.text
span = a.span.text
if heading == "Parking":
parking.append(span)
elif heading == "Rooms":
rooms.append(span)
elif heading == "Toilets":
toilets.append(span)
print("Parking =" , parking)
print("Rooms =", rooms)
print("Toilets =", toilets)
li
u 提供的值的输出:
Parking = []
Rooms = ['2']
Toilets = ['1']
编辑:
虽然这可行,但我觉得拥有这么多lists
并不是一个好方法。相反,您可以使用dictionary
. 这就是你如何使用 a 实现相同的输出dictionary
:
details_dict = {'Parking':[],
'Rooms':[],
'Toilets':[]}
for a in attribute:
heading = a.strong.text
span = a.span.text
if heading == "Parking" or heading == "Rooms" or heading == "Toilets":
details_dict[heading].append(span)
print(details_dict)
输出:
{'Parking': [], 'Rooms': ['2'], 'Toilets': ['1']}
我觉得这是一个更好的方法。但这完全取决于你。选择最适合您的任务的。
推荐阅读
- python - 使用 google API 发送电子邮件时出现“unauthorized_client”错误
- kdb - 在 q/KDB 中将序列号转换为日期并更新到新列
- google-cloud-platform - 使用 Cloudflare 设置服务器端 TAG Manager 时的 DNS 记录
- c# - 重新分配子类中的字段(干净的代码)
- postman - 在 Postman 发布请求中传递对象时使用键值编辑
- java - 在 Reactor Java 应用程序中可以拥有的发布者或订阅者的数量是否有上限?
- r - 在有条件重复的日期之间按组合并
- docker - Mac 上的 Docker 4.1.1 缺少 Docker Compose V2
- router - Experia box v8 VGV7519开机时所有灯都亮?
- delphi - 来自 Delphi 的 Google People API 身份验证