江湖小白之一起学Python (二)爬取数据的保存

接着上篇来说,我怕信息量太大,就放到这里讲数据的保存了,爬下来的数据怎么保存呢,来,我们马上开始……

目前保存数据就常用的几种:txt文件,csv文件、Excel文件等等,还有就是插入数据库,做为前期小白的我们, 要求不要那么高,我们先保存为txt文件,下面就来操作下保存抓取到的目录标题及网址,我们将它保存为txt文件,这里先用到上篇抓取小说网的目录方法:

#coding:utf-8
import requests
from pyquery import PyQuery as pq
#虽然pyquery封装了requests请求,但我还是单独提出来,以后经常会用到requests模块
url='http://www.530p.com/dushi/tashenshangyoutiaolong-175288/'
response=requests.get(url=url)
response.encoding = response.apparent_encoding
content=response.text
#用pyquery格式化一下网页内容,下面就可以通过标签提出信息了
soup = pq(content)
clclist=soup(".clc").items()
#循环标题和链接
for clc in clclist:
    # 我们要获取标签里的标题和对应的内容链接地址,先来提取下标题
    title = clc.text()
    url=clc('a').attr('href')
    #拼接内容页完整地址
    detailurl = '{}{}'.format('http://www.530p.com',url)
    print(title,detailurl)

上面就抓到了目录的标题和完整的网页地址,我们将要保存的内容拼接排下版:

content=title+" "+detailurl+"\n"

简单又粗暴,在标题和网址之前加个空格以及加了个\n,这个是啥意思,就是txt里换行,以便于打开txt文件不会出现一坨屎的情况,便于阅读(顺便扯一句,写代码注释这个是良好习惯,以后很重要),下面我们用3行代码实现保存。

f = open('part1.txt','a', encoding ='utf-8')
f.write(content)
f.close()

上面这个啥意思呢,其实就是用到open函数,函数是啥意思,OK,没关系,继续……

open第一个单引号里的part1.txt表示生成的文件名,你也可以加上路径比如D:/part1.txt这样就会保存到D盘下面,没加就会保存到跟你这个代码文件的同一目录下,感觉有点绕,不知道能不能看懂~~!

open第二个单引号表示打开文件的模式,有很多中,r、rb、r+、w、w+、a、a+等等具体可以自己去看下open函数的用法,这里我们用到了a,表示文件的追加,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入,明白了没,在通俗点就是,我把标题和网址一行一行的保存到txt文件里。

open第三个参数encoding ='utf-8'这个是编码,基本都用这个,跳过……

f.write(contents)   这句呢就是表示把刚刚拼接的内容写入到txt文件里。

f.close()    这句呢就是表示写入完成后,关闭这个txt文件,不加这句,你这个文件就一直是打开状态,比较重要。

好了我们运行看下效果:

你就说简单不简单,这里埋个伏笔,头脑灵活的小白,可以尝试将小说正文逐个保存为txt文件。

额,篇幅较短,叔叔不能忍,我们再说下保存csv文件,这是什么文件(表格文件),你就当它是excel文件,可以用excel打开,来,咱们开始上代码,首先你得载入一下csv这个库,这是python自带的,加在哪里?往下看,引入库都是用import方法,正常的写法是import csv,但图个方便,直接逗号再加上csv:

import requests,csv

 下面是主要代码:

with open('part1.csv', 'a',encoding='utf-8') as f:
    cw = csv.writer(f)
    content=[]
    content.append(title)
    content.append(detailurl)
    cw.writerow(content)
    f.close()

似曾相似燕归来,跟上面的open函数用法差不多,不懂?嗯嗯,这个就是这么用的,略过……

这3句是什么鬼,这叫数组,是不是有个点印象,看过第一篇的稍微说了下,没看过的赶紧去看,本教程环环相扣,逻辑缜密……

content=[]
content.append(title)
content.append(detailurl)

意思就是先定义一个空数组,通过append方法把标题和对应的网址塞到这个数组中,至于这个数组的用途就是为了写入到csv文件中,这里还是一行一行写入,一次性的请自行解决~~!来,看下效果:

我列X,这是啥东西,小白不用慌,这是中文乱码而已,我们轻轻将encoding='utf-8'这句改成:encoding='utf-8-sig',细心的小白会注意到为什么数据之间会空一行,不要急,我们在加上newline='',完整如下:

with open('part1.csv', 'a',newline='',encoding='utf-8-sig') as f:

删除掉之前生成的part1.csv(删除时切记不能打开),然后轻轻的在运行一下:

完美,好了,上面的CSV文件是一行一行保存,你也可以获取到整个数据一起保存,使用writerows方法,有兴趣的可以自行操作下,简单的数据保存就到此结束,我们总喜欢不劳而获(白嫖),下面来段完整代码:

txt代码:

#coding:utf-8
import requests
from pyquery import PyQuery as pq
#虽然pyquery封装了requests请求,但我还是单独提出来,以后经常会用到requests模块
url='http://www.530p.com/dushi/tashenshangyoutiaolong-175288/'
response=requests.get(url=url)
response.encoding = response.apparent_encoding
content=response.text
#用pyquery格式化一下网页内容,下面就可以通过标签提出信息了
soup = pq(content)
clclist=soup(".clc").items()
#循环标题和链接
for clc in clclist:
    # 我们要获取标签里的标题和对应的内容链接地址,先来提取下标题
    title = clc.text()
    url=clc('a').attr('href')
    #拼接内容页完整地址
    detailurl = '{}{}'.format('http://www.530p.com',url)
    contents=title+" "+detailurl+"\n"
    f = open('part1.txt','a', encoding ='utf-8')
    f.write(contents)
    f.close()

csv代码:

#coding:utf-8
import requests,csv
from pyquery import PyQuery as pq
#虽然pyquery封装了requests请求,但我还是单独提出来,以后经常会用到requests模块
url='http://www.530p.com/dushi/tashenshangyoutiaolong-175288/'
response=requests.get(url=url,timeout=10)
response.encoding = response.apparent_encoding
content=response.text
#用pyquery格式化一下网页内容,下面就可以通过标签提出信息了
soup = pq(content)
clclist=soup(".clc").items()
#循环标题和链接
for clc in clclist:
    # 我们要获取标签里的标题和对应的内容链接地址,先来提取下标题
    title = clc.text()
    url=clc('a').attr('href')
    #拼接内容页完整地址
    detailurl = '{}{}'.format('http://www.530p.com',url)
    with open('part1.csv', 'a',newline='',encoding='utf-8-sig') as f:
        cw = csv.writer(f)
        content=[]
        content.append(title)
        content.append(detailurl)
        cw.writerow(content)
        f.close()

其实东西很少,python最大的优点就是很多库,比较完善,主要就是会用这些库,了解其中的参数,大部分都是这样,融会贯通,用得多了都是大同小异,区别就是要研究下这个库或者方法怎么使用的问题,好了,此篇到此结束,咱们下篇见!

关注公众号,不定期推出一些爬虫代码

如果有需要了解的和不明白的也可以加公众号留言,我会整理一些代码提供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值