selenium - 问题迭代并将 html 内容保存到 csv
问题描述
进口
from selenium import webdriver
import time
from bs4 import BeautifulSoup
import datetime
from datetime import date
from datetime import datetime
today = date.today()
now = today.strftime("%d.%m.%Y")
from datetime import date
from dateutil.rrule import rrule, DAILY
我想每天检查,所以我用日期制作网址
kurl1 = ('https://www.matterhornparadise.ch/de/Buchen/Online-Tickets/Skipass-Zermatt?from=')
kurl2 = ('&to=')
kurl3 = ('#ticketCategory')
#three days
a = date(2019, 12, 1)
b = date(2019, 12, 3)
在这里,我创建了一个包含所有 url 的列表,所以我可以通过 selenium 打开它们中的每一个
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 文件中获取所有三个 html。但它会覆盖。任何人都可以帮忙吗?
for jede in urllst:
driver.get(jede)
schreib1 = driver.page_source.encode('utf-8')
schreib2 = driver.page_source.encode('utf-8')
schreib3 = driver.page_source.encode('utf-8')
with open('Daten_zermatt_'+now+'.htm', 'wb+') as file:
file.write(schreib1+schreib2+schreib3)
file.close()
解决方案
欢迎来到SO。
您的代码中缺少部分 - 因此,我无法准确重现您的代码的行为 - 但我可以在最后一个块中看到一个逻辑谬误:您正在提取相同页面源的三倍(请注意,在for 循环,你driver.get
一次,而你提取page_source
三次);最后,您将三个相同的 html 文件写在一个文件中。
下面的代码片段提取了两个不同页面的源并将它们存储在一个 html 文件中 - 顺便说一句,这几乎是不可读的:
import requests
from selenium import webdriver
browser = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")
urllist = ['https://www.google.com', 'https://www.bing.com']
with open('foo.html', 'wb+') as g:
for url in urllist:
browser.get(url) # get the i-th url
schreib = browser.page_source.encode('utf-8') # extract its source
g.write(schreib) # write it on the html
g.close()
browser.close()
总结一下:需要在循环外打开html文件,然后在循环内一一写入源文件。
最后,我强烈建议您不要将多个 html 页面存储在一个本地文件中:每页只写一个文件,以避免出现问题。
推荐阅读
- android - 为什么我的活动在设备上停止
- java - 在 Java 中,仅使用 PEM 文件创建 SSLContext 的最简单方法是什么?
- git - 从 GitHub Desktop 历史记录中恢复文件
- r - 强制大向量的错误?
- javascript - AngularJS ng-click 仅适用于第二次单击
- python - Spyder Debug - 如何修复代码并继续单步执行
- postgresql - 如何在 PostgreSQL 中创建序列以将 nextval 添加到表已存在的 id 列?
- c++ - QT - 将 QPushButtons 与 QCheckBoxes 连接
- php - PHP OAuth 错误处理
- ios - 如何修复 AWSCore (AWS-sdk-ios) 中的 [AWSTask 异常] 崩溃