python爬虫实践——零基础快速入门(五)将爬取的数据存到本地

前面我们已经爬取了豆瓣电影,豆瓣读书,小猪租房的数据,那有人就有疑问了,我爬取那么多数据,怎么把他们保存在本地呢?今天我们就来讲讲如何把爬取的数据信息存储到本地。

###一、pyhton open() 方法

写文件时,我们主要用到with open() 的方法。

with open(name,mode,encoding) as file:
	file.write() #注意这里有缩进哦
  • name : 包含文件名称的字符串,比如:‘MTbaby.txt’
  • mode : 决定了打开文件的模式,只读、写入、追加等。常见的模式如下:
参数用法
r只读,若不存在文件会报错
w只写,若不存在文件会自动创建
a附加到文件末尾

跟多模式请参考http://blog.csdn.net/mtbaby/article/details/79141455

  • encoding : 表示我们要写入数据的编码方式,一般为uft-8或者gbk。
  • file:表示我们在代码中对文件的命名。

用我们前面爬的豆瓣读书的信息来操作一下

这里写图片描述

#-*- coding:utf-8 -*-
import requests
from lxml import etree
import time


with open(r'C:/Users/nicker/Desktop/aa.txt','w',encoding='utf-8') as F:
    for i in range(10):
        url2 = 'https://book.douban.com/top250?start{}'.format(i*25)
        data2 = requests.get('https://book.douban.com/top250').text
        f = etree.HTML(data2)
        books = f.xpath('//*[@id="content"]/div/div[1]/div/table')
        for div in books:
            title = div.xpath('./tr/td[2]/div[1]/a/@title')[0]
            score = div.xpath('./tr/td[2]/div[2]/span[2]/text()')[0]
            comment = div.xpath('./tr/td[2]/p[2]/span/text()')[0]
            num = div.xpath('./tr/td[2]/div[2]/span[3]/text()')[0].strip('(').strip().strip(')')
            href = div.xpath('./tr/td[2]/div[1]/a/@href')[0]
            time.sleep(1) #加个睡眠,防止IP被封
                 
            if len(comment)>0:
                #print('{}-->{}-->{}-->{}-->{}'.format(title,score,comment,num,href))
                F.write("{}-->{}-->{}-->{}-->{}\n".format(title,score,comment,num,href))
            else:
                #print('{}-->{}-->{}-->{}'.format(title,score,num,href))
                F.write("{}-->{}-->{}-->{}\n".format(title,score,num,href))
            F.flush()#保证数据及时从缓存写入本地
  • C:/Users/nicker/Desktop/aa.txt
    将写入的文件名 aa.txt ,如果没有将自动创建。
    注意我路径前面加了一个 r ,表示目录路径,有python基础的同学应该知道,不要被转义了哦。
    如果这里不加路径,它将默认保存在你当前的工作目录中。
  • ‘w’:只写的模式,如果没有文件将自动创建。
  • encoding=‘utf-8’:指定写入文件的编码为‘utf-8’;
  • F.write("{}–>{}–>{}–>{}–>{}\n".format(title,score,comment,num,href)):将title,score,comment,num,href的值写入文件。

看看数据存储到文件中是什么样子的:

这里写图片描述

当然,你也可以将文件存储为csv的类型:

#-*- coding:utf-8 -*-
import requests
from lxml import etree
import time


with open(r'C:/Users/nicker/Desktop/bb.csv','w',encoding='utf-8') as F:
    for i in range(10):
        url2 = 'https://book.douban.com/top250?start{}'.format(i*25)
        data2 = requests.get('https://book.douban.com/top250').text
        f = etree.HTML(data2)
        books = f.xpath('//*[@id="content"]/div/div[1]/div/table')
        for div in books:
            title = div.xpath('./tr/td[2]/div[1]/a/@title')[0]
            score = div.xpath('./tr/td[2]/div[2]/span[2]/text()')[0]
            comment = div.xpath('./tr/td[2]/p[2]/span/text()')[0]
            num = div.xpath('./tr/td[2]/div[2]/span[3]/text()')[0].strip('(').strip().strip(')')
            href = div.xpath('./tr/td[2]/div[1]/a/@href')[0]
            time.sleep(1) #加个睡眠,防止IP被封
                 
            if len(comment)>0:
                #print('{}-->{}-->{}-->{}-->{}'.format(title,score,comment,num,href))
                F.write("{},{},{},{},{}\n".format(title,score,comment,num,href))
            else:
                #print('{}-->{}-->{}-->{}'.format(title,score,num,href))
                F.write("{},{},{},{}\n".format(title,score,num,href))
            F.flush()#保证数据及时从缓存写入本地

另外,需要注意的是:csv每个字段之前要用逗号隔开,所以这里把之前的 ‘—>’ 改成了空格。

csv文件你可以用notpad++打开,也可以用exal打开。

下一节动态类数据抓取

在这里插入图片描述

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值