You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python合并两个re.findall结果导出销售日期与地址两列数据到CSV

解决方法

核心逻辑很简单:你已经拿到了长度完全对等的日期列表d和地址列表a,只需要把两个列表按索引一一配对,逐行写入CSV即可,不需要把两个列表拼接后遍历。

下面是修改后可直接运行的完整代码:

#!/usr/bin/env python
import re
import requests
from bs4 import BeautifulSoup
import csv

page = requests.get('https://salesweb.civilview.com/Sales/SalesSearch?countyId=32')
soup = BeautifulSoup(page.text, 'html.parser')
list_ = soup.find(class_='table-striped')
list_items = list_.find_all('tr')
content = list_items

# 匹配原始带标签的日期、地址列表
d = re.findall(r"<td>\d*/\d*/\d+</td>",str(content))
a = re.findall(r"<td>\d*?\s.+\d+?.*</td>",str(content))

# 清理标签,得到干净的日期、地址列表
clean_dates = [re.sub(r"</?td>", "", item) for item in d]
clean_addresses = [re.sub(r"</?td>", "", item) for item in a]

# 写入CSV文件
with open('房产销售数据.csv', 'w', encoding='utf-8-sig', newline='') as f:
    writer = csv.writer(f)
    # 写入表头
    writer.writerow(['销售日期', '地址'])
    # 配对日期和地址,逐行写入
    for date, addr in zip(clean_dates, clean_addresses):
        writer.writerow([date, addr])

参数说明

  • encoding='utf-8-sig'是为了避免在Excel中打开CSV时出现中文乱码
  • newline=''是为了避免写入CSV时出现多余空行
  • zip()函数会按顺序把两个列表的元素一一配对,正好匹配你两个列表一一对应的关系

更稳定的优化方案

你其实不需要把HTML转成字符串用正则匹配,直接用BeautifulSoup解析表格行的单元格即可,逻辑更清晰,也不容易出现正则匹配出错的情况,示例逻辑如下:

# 替换原有正则匹配部分的代码
rows = []
for tr in list_.find_all('tr')[1:]: # 跳过表头行
    tds = tr.find_all('td')
    # 按需取对应列的内容,索引值根据实际表格列顺序调整即可
    sale_date = tds[0].get_text(strip=True)
    address = tds[2].get_text(strip=True)
    rows.append([sale_date, address])

# 直接批量写入即可
with open('房产销售数据.csv', 'w', encoding='utf-8-sig', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['销售日期', '地址'])
    writer.writerows(rows)

内容的提问来源于stack exchange,提问作者Steven Greer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:42:03