使用正则表达式查找字符串模式并将结果附加到列表中

2024-09-30 01:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个在Python上使用re库的noob。我正在做一个网页抓取,我想匹配一些字符串模式并将值附加到列表中。例如:

parking = []
rooms  = []
toilets = []


attribute = soup.find('ul',{'class':'specs-list'}).find_all('li')
for a in attribute:
    print(a.text)

输出索引为0的迭代

Metters
50 m�

Rooms
2

Toilets
1

索引为1的输出迭代a

   Metters
   50 m�
   
   parking 
   1
   
   spends
   340 

 

例如,我想匹配标题的名称,如果标题上存在一个值,我想将结果附加到每个列表上

伪代码:

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创建web刮片,属性值的结果如下:

索引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>]

一个属性的长度为5个值,每个值的代码与上述值类似,但标题和值不同,有些包含停车场、房间、卫生间,有些仅包含卫生间和房间,依此类推


Tags: 标题ifattributeliitemclassstrongspan
1条回答
网友
1楼 · 发布于 2024-09-30 01:25:29

这将有助于你:

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)

u提供的li值的输出:

Parking = []
Rooms = ['2']
Toilets = ['1']

编辑:

虽然这是可行的,但我觉得拥有这么多lists并不是一个好方法。相反,您可以使用dictionary。这就是u如何使用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']}

我觉得这是一个更好的办法。但这一切都取决于美国。选择最适合你的任务

相关问题 更多 >

    热门问题