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

循环获取多日期页面HTML并合并写入文件时遇覆盖问题求助

解决多页面HTML合并写入文件的覆盖问题

我来帮你搞定这个问题!你当前代码的核心问题是:循环里每次都重新给schreib1、schreib2、schreib3赋值,最后这三个变量存的都是最后一个页面的HTML内容,所以写入文件时其实是把同一个页面重复写了三遍,之前的页面内容全被覆盖丢失了。

修改思路

我们需要把每个页面的HTML内容累加收集起来,而不是每次覆盖变量,最后一次性写入文件。具体步骤:

  1. 初始化一个空的字节串(因为encode('utf-8')返回的是bytes类型)来存储所有页面内容
  2. 遍历URL列表时,把每个页面的HTML追加到这个字节串中
  3. 最后将所有收集到的内容写入文件

修改后的完整代码

from selenium import webdriver
import time
from bs4 import BeautifulSoup
from datetime import date, datetime  # 合并重复的导入,更简洁
from dateutil.rrule import rrule, DAILY

# 生成含日期的URL
kurl1 = 'https://www.matterhornparadise.ch/de/Buchen/Online-Tickets/Skipass-Zermatt?from='
kurl2 = '&to='
kurl3 = '#ticketCategory'

# 设定日期范围:2019年12月1日至3日
a = date(2019, 12, 1)
b = date(2019, 12, 3)

# 生成URL列表
urllst = []
for dt in rrule(DAILY, dtstart=a, until=b):
    datum = dt.strftime("%Y-%m-%d")
    liste = kurl1 + datum + kurl2 + datum + kurl3
    urllst.append(liste)

# 初始化空字节串,用于累加所有页面的HTML内容
all_page_html = b""

# 遍历URL列表,收集每个页面的HTML
for jede in urllst:
    driver.get(jede)
    # 等待页面加载(可根据实际情况调整时长)
    time.sleep(2)
    # 获取当前页面的HTML并追加到all_page_html中
    current_html = driver.page_source.encode('utf-8')
    all_page_html += current_html

# 将所有收集到的内容写入文件
today = date.today()
now = today.strftime("%d.%m.%Y")
with open(f'Daten_zermatt_{now}.htm', 'wb+') as file:
    file.write(all_page_html)
# with语句会自动关闭文件,无需手动调用file.close()

关键改动说明

  • 内容收集方式:用all_page_html变量累加每个页面的内容,避免了之前的覆盖问题
  • 文件管理:保留with语句,它会自动处理文件的打开和关闭,比手动调用close()更安全可靠
  • 页面加载等待:添加time.sleep(2)确保页面完全加载后再获取源码,避免因为页面未加载完成导致获取的内容不完整
  • 导入优化:合并了重复的datetime模块导入,让代码更整洁

内容的提问来源于stack exchange,提问作者Fabian von Allmen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:46:58