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

朱雀 2020-10-18 06:17 1358阅读 0赞

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

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

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

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

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

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

  1. f = open('part1.txt','a', encoding ='utf-8')
  2. f.write(content)
  3. 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文件,不加这句,你这个文件就一直是打开状态,比较重要。

好了我们运行看下效果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p5bG9uZ2Vy_size_16_color_FFFFFF_t_70

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

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

  1. import requests,csv

下面是主要代码:

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

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

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

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

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p5bG9uZ2Vy_size_16_color_FFFFFF_t_70 1

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

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

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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p5bG9uZ2Vy_size_16_color_FFFFFF_t_70 2

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

txt代码:

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

csv代码:

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

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

发表评论

表情:
评论列表 (有 1 条评论,1358人围观)
蒲公英云830F80
蒲公英云830F80V铁粉 2022-09-24 03:29
牛皮

相关阅读