本篇博文是自己在学习崔庆才的《Python3网络爬虫开发实战教程》的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号【小众技术】,关注后回复【PYTHON】,无套路免费送你一个学习大礼包,包括爬虫视频和电子书~
------------------------------------------------------------------华丽分割线----------------------------------------------------------------------------------------------------
数据的存储是爬虫开发中一个很重要的环节,而存储的形式也分为很多种,大体来说分为两种。一种是将爬取到的数据储存到文件中,另一种就是将数据直接存储到数据库中。两种形式各有各的优点。
今天我就总结一下如何将爬取到的数据存储到TXT,Word,Excel,Json等文件中。其实这些方法大同小异,原理都差不多,只不过是分别运用了不同的库函数,使用的不同的方法而已。
1.将数据存储到TXT文件中
存到TXT文件是最简单也是最好理解的,主要是用到了open函数。接下来我就用一个小例子给大家演示一下吧。我会爬取一下知乎(www.zhihu.com)发现页面推荐的几个问题,将标题,答主,答案存储到一个TXT文件中,每个问题用“=”来隔开。废话话不多说,直接上代码讲解!
import requests,docx
from pyquery import PyQuery as pq
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
}
url = 'https://www.zhihu.com/explore'
def get_page(url,headers):
response = requests.get(url,headers=headers)
#用pyquery解析工具对网页进行解析
doc = pq(response.text)
#对于多结果要调用items()方法,以便进行遍历
items = doc('.explore-tab .feed-item').items()
for item in items:
#获取标题
title = item.find('h2').text()
#获取答主
author = item.find('.author-link').text()
#获取回答,由于回答内容中也包含HTML代码,所以还需要用pq将纯文本提取出来
text = pq(item.find('.content').html()).text()
#保存数据
save_page(title,author,text)
def save_page(title,author,text):
with open('zhihu.txt','a',encoding='utf8') as f:
f.write(title+'\n')
f.write(author+'\n')
f.write(text+'\n')
f.write('='*50+'\n'*2)
if __name__ == '__main__':
get_page(url,headers)
2.将数据存储到Word文档中
其实Word和TXT都是文本存储容器,只不过Word文档的功能多,可以更改文本的格式。如果想要将爬取的数据放入Word文档需要先用pip安装python-docx模块,然后在文档中导入docx库,使用一些方法即可。没有什么新鲜的内容。例子还用上面那个,只需要将save_page()方法改一下就可以了:
import requests,docx
from pyquery import PyQuery as pq
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
}
url = 'https://www.zhihu.com/explore'
def get_page(url,headers):
response = requests.get(url,headers=headers)
#用pyquery解析工具对网页进行解析
doc = pq(response.text)
#对于多结果要调用items()方法,以便进行遍历
items = doc('.explore-tab .feed-item').items()
global doc1
doc1 = docx.Document('zhihu.docx')
for item in items:
#获取标题
title = item.find('h2').text()
#获取答主
author = item.find('.author-link').text()
#获取回答,由于回答内容中也包含HTML代码,所以还需要用pq将纯文本提取出来
text = pq(item.find('.content').html()).text()
#保存数据
save_page(title,author,text)
doc1.save('zhihu1.docx')
#存储到Word
def save_page(title,author,text):
doc1.add_paragraph(title)
doc1.add_paragraph(author)
doc1.add_paragraph(text)
doc1.add_paragraph('='*50+'\n')
if __name__ == '__main__':
get_page(url,headers)
3.将数据存储到Excel文档中
详见这篇博文:《崔庆才Python3网络爬虫开发实战教程》学习笔记(3):抓取猫眼电影榜单TOP100电影,并存入Excel表格
4.将数据存储到Json中
Json是一种轻量级的数据交换格式,它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高。要想将数据存储为json格式的字符串数据,需要了解两个函数:
- json.loads():将json文本字符串转换为Json对象(loads:load string)
- json.dumps():将json对象转换为json文本字符串(loads:dump string)
需要注意的是:json文本字符串必须是双引号,否则会报错:json.decoder.JSONDecodeError,也就是说json.loads()参数为双引,json对象可以用单引号,json.dumps()里面的参数可以单引,转换出来后就成了双引号。
import json
#json文本字符串
j ='''[{
"id" : "B227645ADB1628D62732AC8ADDEAD069",
"server" : "uk02.anss.vip",
"server_port" : 20036,
"server_udp_port" : 0,
"password" : "asd100",
"method" : "AES-256-CFB",
"protocol" : "auth_sha1_v4",
"protocolparam" : "",
"obfs" : "tls1.2_ticket_auth",
"obfsparam" : "",
"remarks_base64" : "6Iux5Zu9Mg==",
"group" : "『飞牛』节点",
"enable" : "true",
"udp_over_tcp" : "false"
}]'''
#将json文本字符串转换为json对象
js = json.loads(j)
#js对象为list数据结构
print(type(js))
#将json对象转换为json文本字符串
js1 = json.dumps(js)
#js1为字符串
print(type(js1))