Python爬虫数据存储之TXT文本

99封情书 提交于 2020-01-14 01:44:54

前言:获取数据后可以选择多种存储方式,可以是TXT纯文本形式,也可以为JSON格式、CSV格式等。TXT文本几乎兼容任何平台,但不利于检索的缺点也暴露无遗。若是对检索和数据结构的要求不高,追求方便的情况下可以采用TXT文本存储。

参考:《Python3网络爬虫开发实战-崔庆才》

一,实例

保存知乎上“法线页面的‘热门话题”部分,将其问题和答案统一保存成文本形式。

思路:

1. 使用requests将网页源代码获取下来
2. 使用pyquery解析库解析
3. 提取标题、回答者、回答保存为文本

code:

'''
 以知乎为例
    1. 使用requests将网页源代码获取下来
    2. 使用pyquery解析库解析
    3. 提取标题、回答者、回答保存为文本
'''

import requests
from pyquery import PyQuery as pq

url = 'https://www.zhihu.com/explore'
headers = {
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}
html = requests.get(url,headers=headers).text
doc = pq(html)
items = doc('.explore-tab .feed-item').items()   # 遍历
for item in items:
    question = item.find('h2').text()
    author = item.find('.author-link-line').text()
    answer = pq(item.find('.content').html()).text()
    file = open('explore.txt','a',encoding='utf-8')  # 'a' 以追加的方式写入到文本
    file.write('\n'.join([question,author,answer]))
    file.write('\n' + '=' * 50 + '\n')
    file.close()

'''
另一种写法
    with open('explore.txt','a',encoding='utf-8') as file:
        file.write('\n'.join([question,author,answer]))
        file.write('\n' + '=' * 50 + '\n')
若保存时清空原文 将 第二个参数'a'改为 'w'即可
'''

 二, 文本打开方式

 

上述实例中,open()方法的第二个参数设置为a,每次写入文本时不会清空源文件,而是在文件末尾写入新的内容,这是文本的一种打开方式,常用文本打开方式如下:

 

r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb:以二进制只读方式打开一个文件。文件指针将会放在1文件的开头。

r+:以读写方式打开一个文件。文件指针将会放在文件的开头。

rb+:以二进制读写方式打开一个文件。文件指针将会放在文件的开头。

w:以写入方式打开一个文件。如果该文件已经存在,则将其覆盖。若不存在,则创建新文件。

wb:以二进制写入方式打开一个文件。如果该文件已经存在,则将其覆盖。若不存在,则创建新文件。

w+:以读写方式打开一个文件。如果该文件已经存在,则将其覆盖。若不存在,则创建新文件。

wb+:以二进制读写格式打开一个文件。如果该文件已经存在,则将其覆盖。若不存在,则创建新文件。

a:以追加方式打开一个文件。如果该文件已经存在,文件指针将会放在文件结尾。也就是,新的内容将会被写入到已有的内容之后。如果该文件不存在,则创建文件来写入。

ab:以二进制追加方式打开一个文件。如果该文件已经存在,文件指针将会放在文件结尾。也就是,新的内容将会被写入到已有的内容之后。如果该文件不存在,则创建文件来写入。

a+:以读写方式打开一个文件。如果文件已经存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果文件不存在,则创建新文件来读写。

ab+:以二进制追加方式打开一个文件。如果该文件已存在,则文件指针将会放在文件结尾,如果文件不存在,则创建新文件用于读写。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!