当前位置:  首页>> 技术小册>> Python3网络爬虫开发实战(上)

4.1 TXT 文本文件存储

在网络爬虫开发中,数据存储是一个至关重要的环节。爬虫从网络上抓取的数据需要被有效地存储起来,以便后续的分析、处理或展示。TXT文本文件作为一种简单、通用且易于处理的文件格式,在网络爬虫的数据存储中扮演着重要角色。本章将详细介绍如何在Python中使用TXT文本文件来存储爬取的数据,包括文件的打开与关闭、数据的写入与读取,以及处理大规模数据时的一些优化策略。

4.1.1 TXT文件基础

TXT文本文件是一种纯文本文件,不包含任何格式设置或元数据(如字体、颜色等),仅由文本字符组成。这种格式因其简单性和跨平台性而被广泛应用。在Python中,处理TXT文件主要通过内置的open()函数来实现,该函数用于打开文件,并返回一个文件对象,该对象提供了一系列的方法用于读写文件。

4.1.2 打开与关闭文件

打开文件

使用open()函数打开文件时,需要指定文件名和模式。模式决定了文件是只读、只写、追加还是其他。对于TXT文本文件,常用的模式有:

  • 'r':只读模式(默认)。如果文件不存在,抛出FileNotFoundError
  • 'w':写入模式。如果文件已存在,则覆盖;如果文件不存在,则创建新文件。
  • 'a':追加模式。写入的数据会被追加到文件末尾,如果文件不存在,则创建新文件。
  • 'r+''w+''a+':分别对应读写、读写(覆盖)、读写并追加模式。

示例代码:

  1. # 打开文件以读取
  2. with open('example.txt', 'r') as file:
  3. content = file.read()
  4. print(content)
  5. # 打开文件以写入
  6. with open('example.txt', 'w') as file:
  7. file.write('Hello, World!')
  8. # 打开文件以追加
  9. with open('example.txt', 'a') as file:
  10. file.write('\nAnother line.')

注意,使用with语句可以自动管理文件的打开和关闭,这是处理文件时的最佳实践。

4.1.3 写入数据到TXT文件

向TXT文件写入数据,通常使用文件对象的write()writelines()方法。write()方法用于写入单个字符串,而writelines()方法接受一个字符串列表作为参数,并将它们逐一写入文件(注意,不会自动添加换行符,除非在字符串中明确指定)。

示例代码:

  1. # 使用write()方法
  2. with open('data.txt', 'w') as file:
  3. file.write('First line.\n')
  4. file.write('Second line.\n')
  5. # 使用writelines()方法
  6. lines = ['Third line.\n', 'Fourth line.\n']
  7. with open('data.txt', 'a') as file:
  8. file.writelines(lines)

4.1.4 读取TXT文件内容

读取TXT文件内容,常用的方法有read()readline()readlines()

  • read():读取文件全部内容,并返回一个字符串。
  • readline():读取文件中的一行,并返回一个字符串。如果到达文件末尾,则返回空字符串。
  • readlines():读取文件中所有行,并将它们作为一个字符串列表返回。

示例代码:

  1. # 读取全部内容
  2. with open('data.txt', 'r') as file:
  3. content = file.read()
  4. print(content)
  5. # 逐行读取
  6. with open('data.txt', 'r') as file:
  7. line = file.readline()
  8. while line:
  9. print(line, end='') # end='' 防止print自动添加换行
  10. line = file.readline()
  11. # 使用readlines()
  12. with open('data.txt', 'r') as file:
  13. lines = file.readlines()
  14. for line in lines:
  15. print(line, end='')

4.1.5 处理大规模数据

当处理大规模数据时,直接一次性读取或写入整个文件可能会导致内存溢出或效率低下。为此,可以采用以下策略:

  1. 分批处理:将大文件分成小块,逐块处理。可以使用readline()或固定大小的缓冲区来实现。

  2. 使用生成器:Python的生成器允许你按需生成数据,这对于处理大文件特别有用。通过定义一个生成器函数,可以逐个或逐块读取文件内容,而无需一次性加载到内存中。

  3. 多线程/多进程:对于I/O密集型任务,如文件读写,可以使用多线程或多进程来加速处理过程。但需注意Python的全局解释器锁(GIL)对多线程并行执行CPU密集型任务的影响。

4.1.6 示例:爬取网页内容并保存为TXT文件

以下是一个简单的网络爬虫示例,它使用requests库获取网页内容,并将内容保存为TXT文件。

  1. import requests
  2. def fetch_url_content(url):
  3. try:
  4. response = requests.get(url)
  5. response.raise_for_status() # 如果请求失败,则抛出HTTPError异常
  6. return response.text
  7. except requests.RequestException as e:
  8. print(f"Error fetching {url}: {e}")
  9. return None
  10. def save_to_txt(content, filename):
  11. with open(filename, 'w', encoding='utf-8') as file:
  12. file.write(content)
  13. if __name__ == "__main__":
  14. url = 'http://example.com'
  15. content = fetch_url_content(url)
  16. if content:
  17. save_to_txt(content, 'webpage_content.txt')
  18. print("Content saved successfully.")

在这个示例中,我们首先定义了fetch_url_content()函数来抓取网页内容,然后使用save_to_txt()函数将内容保存到TXT文件中。注意,在保存文件时指定了encoding='utf-8'来确保能够正确处理Unicode字符。

结语

TXT文本文件作为一种简单而强大的数据存储方式,在网络爬虫开发中扮演着重要角色。通过掌握文件的打开与关闭、数据的写入与读取,以及处理大规模数据的策略,你可以更加高效地存储和管理爬取的数据。此外,将爬虫抓取的数据保存到TXT文件中,也为后续的数据分析、处理或展示提供了便利。


该分类下的相关小册推荐: