每个人!我正在尝试从网站上抓取数据并将任何尚未复制到 .csv 文件的条目添加到 .csv 文件中,但我似乎无法正确编写它。
url = 'www.website.com'
def getInfo():
global oldMaxValue, oldMaxRow, newInfo
newInfo = 0
with open("file.csv", "a") as f:
data = requests.get(url)
text = data.text
newRows = [line.split(',') for line in text.split("\n") if line]
newMaxValue = max(row[0] for row in newRows)
for i in newRows:
if int(i[0]) > int(oldMaxValue):
f.write(str(i))
oldMaxValue = newMaxValue
任何指导将不胜感激。非常感谢! :)
以下是使用 Python 将新数据附加到 CSV 文件的方法:
import csv
import requests
url = 'https://www.example.com' # 将其替换为实际的网址
def get_info():
"""从网站抓取数据并将新条目附加到 CSV 文件。"""
try:
response = requests.get(url)
response.raise_for_status() # 检查请求是否失败
except requests.exceptions.RequestException as e:
print(f"请求错误:{e}")
return
text = response.text
# 查找 CSV 文件中已经存在的最大值(如果文件存在)。
try:
with open("file.csv", "r") as f:
reader = csv.reader(f)
last_row = list(reader)[-1] # 获取最后一行
old_max_value = int(last_row[0]) # 假设第一个元素是之前保存的最大值
except FileNotFoundError:
old_max_value = 0 # 如果文件不存在,则从 0 开始
new_rows = [line.split(',') for line in text.split("\n") if line]
with open("file.csv", "a", newline='') as f:
writer = csv.writer(f)
for row in new_rows:
if int(row[0]) > old_max_value:
writer.writerow(row)
print(f"添加新行:{row}")
if __name__ == "__main__":
get_info()
说明:
- 导入必要的库:
-
csv
用于处理 CSV 文件。 -
requests
用于从 URL 获取数据。 -
处理错误:
-
添加了一个
try...except
块来捕获requests.get()
期间可能发生的任何错误。这可以防止脚本在出现网络问题或 URL 无效时崩溃。 -
读取现有数据:
-
使用
csv.reader
读取 CSV 文件,并找到最后一行的第一个元素(假设它是要跟踪的最大值)。 -
附加新数据:
-
使用
csv.writer
将新行附加到 CSV 文件。newline=''
参数可防止在行之间出现空行。 -
使用
if __name__ == "__main__":
: - 这可确保仅当直接运行脚本时才调用该函数,而不是在将其作为模块导入时调用。
如何使用:
-
使用要抓取的实际网站替换
'https://www.example.com'
。 -
运行脚本:
python your_script_name.py
-
首次运行该脚本时,它将创建一个名为
file.csv
的文件,并将所有数据写入其中。后续运行只会附加自上次运行后添加的新条目。
这应该可以解决问题,并使的网络抓取和 CSV 附加过程更加健壮。请告诉我是否还有其他问题。
标签:python From: 17499278