文件形式存储爬虫数据

本文介绍了如何将爬虫数据存储到文件中,包括文本文件、CSV和Excel文件的读写操作。示例展示了使用Python进行数据序列化时,确保中文正确显示的方法,以及在CSV和Excel文件中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

—— 如果需要将数据存储到文件,为了数据的可读性,可以按行写入。常用的文件类型:txt、csv、Excel

文本文件的写入和读取

例子:

import json


"""字符串写入"""
for i in range(10):
    with open('a.txt', 'a') as file:
        file.write(str(i)+'\n')


"""字典或列表转换成json写入"""
ips = [
    {"https": "https:116.208.48.141:61234"},
    {"https": "https:113.120.32.64:9999"},
    {"https": "https:110.86.139.150:9999"},
    {"https": "https:175.153.21.87:61234"},
    {"https": "https:124.135.120.48:61234"},
    {"https": "https:183.166.137.237:61234"},
    {"https": "https:218.22.7.62:53281"},
    {"https": "https:171.221.203.130:10184"},
    {"https": "https:113.120.32.64:9999"},
    {"https": "https:140.143.48.49:1080"},
    {"https": "https:61.128.208.94:3128"},
    {"https": "https:122.136.212.132:53281"},
    {"https": "https:175.153.21.87:61234"},
    {"https": "https:112.85.150.176:9999"},
    {"https": "https:101.27.20.167:61234"},
    {"https": "https:112.85.150.176:9999"},
]

for ip in ips:
    with open('b.txt', 'a') as file:
        file.write(json.dumps(ip)+'\n')


"""按行读取"""
with open('b.txt', 'r') as file:
    lines = file.readlines()
    for line in lines:  # 遍历
        ip = json.loads(line.strip())
        print(ip)

注:json.dumps 序列化时对中文默认使用的ascii编码。想输出真正的中文需要指定ensure_ascii=False

例子:

with open('result.txt', 'a', encoding='utf-8') as f:
    f.write(json.dumps(content, ensure_ascii=False)+'\n')


csv文件的写入和读取

爬取豆瓣电影 Top 250 的例子,并保存为csv文件

from fake_useragent import UserAgent
from lxml import etree
import requests
import csv
import time


def crawler(url):
    """爬取指定url页面信息"""
    try:
        headers = {'User-Agent': UserAgent().chrome}
        res = requests.get(url, headers=headers)
        res.raise_for_status()
        return res.text
    except:
        return None


def parse(content):
    """解析爬取网页中的内容,并返回字段结果"""
    # =======使用xpath解析====================
    # 解析HTML文档,返回根节点对象
    html = etree.HTML(content)
    # 获取网页中所有标签并遍历输出标签名
    items = html.xpath('//div[@class="item"]')
    # 遍历封装数据并返回
    for item in items:
        yield {
            'index': item.xpath('.//div/em[@class=""]/text()')[0],
            'title': item.xpath('.//span[@class="title"][1]/text()')[0],
            'actor': item.xpath('.//p[@class=""]/text()[1]')[0].strip(),
            'score': item.xpath('.//span[@class="rating_num"]/text()')[0],
        }


def save(items):
    """执行文件追加写操作"""
    for item in items:
        print(item)
        # 写入行内容
        writer.writerow([item['index'], item['title'], item['actor'], item['score']])


def main():
    """主程序函数,负责调度执行爬虫处理"""
    for i in range(0, 250, 25):
        url = f'https://movie.douban.com/top250?start={i}'
        html = crawler(url)
        # 判断是否爬取到数据,并调用解析函数
        if html:
            items = parse(html)
            # 执行文件追加写操作
            save(items)
            # 减慢爬虫速度
            time.sleep(1)


if __name__ == '__main__':
    """创建csv文件对象"""
    with open('Top250.csv', 'w', newline='', encoding='utf-8-sig') as f:
        writer = csv.writer(f)
        """写入头部信息"""
        writer.writerow(['排名', '电影', '主演', '评分'])
        """调用主函数爬取数据"""
        main()


csv文件的读取
import csv


with open('Top250.csv', 'r', newline='', encoding='utf-8-sig') as f:
    reader = csv.reader(f)
    for line in reader:
        print(line)


Excel文件的写入和读取

一个Excel文档也称为一个工作薄(workbook),每个工作薄里可以有多个工作表(wordsheet),当前打开的工作表又叫活动表

每个工作表里有行和列,特定的行与列相交的方格称为单元格(cell)。比如上图第A列和第1行相交的方格我们可以直接表示为A1单元格

Excel文件写入的例子:

import openpyxl

# 创建新的workbook(工作薄)对象,就是创建新的空的Excel文件
wb = openpyxl.Workbook()

# 创建完新的工作薄后,还得创建工作表
sheet = wb.create_sheet('工作表1', 0)
sheet2 = wb.create_sheet('工作表2', 1)

"""添加完工作表,就可以操作单元格,往单元格里写入内容"""

sheet['A1'] = '漫威宇宙'
# 把'漫威宇宙'赋值给第一个工作表的A1单元格,就是往A1的单元格中写入了'漫威宇宙'

"""如果想往工作表里写入一行内容的话,就得用到append函数"""

row = ['美国队长', '钢铁侠', '蜘蛛侠']
# 把我们想写入的一行内容写成列表,赋值给row

sheet.append(row)
# 用sheet.append()就能往表格里添加这一行文字

"""成功写入后,记得保存这个Excel文件,不然就白写啦"""

wb.save('Marvel.xlsx')


Excel文件读取的例子:

import openpyxl


wb = openpyxl.load_workbook('Marvel.xlsx')
# 调用 openpyxl.load_workbook()函数,打开'Marvel.xlsx'文件

sheet = wb['工作表1']
# 获取'Marvel.xlsx'工作薄中名为'工作表1'的工作表。

"""如果不知道工作薄到底有几个工作表,可以把工作表的名字都打印出来"""
sheet_names = wb.sheetnames
print(sheet_names)


A1 = sheet['A1'].value
print(A1)
# 打印出A1单元格的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值