您当前的位置: 首页 >  Python

快乐很重要的汪

暂无认证

  • 2浏览

    0关注

    36博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python爬虫实战(1)

快乐很重要的汪 发布时间:2022-09-03 09:57:20 ,浏览量:2

Python爬虫实战

本节目标:完整的进行一个小说内容爬取的任务.

本节内容:网站数据的爬取,处理,存储 本节技术点:requests,xpath

本节阅读需要(20)min。 本节实操需要(30)min。

需要请提前阅读: Python爬虫实例(1)–requests的应用 也就是专栏里面实例(1)-(4)的内容.

文章目录
  • Python爬虫实战
  • 前言
  • 一、目标分析
  • 二、内容的爬取
  • 三、内容的处理
  • 总结

前言

前面已经完成了几个爬虫的小目标. 但实际上我们爬取小说网站,一般都是为了小说内容. 之前爬取的可以认为是细节信息.但也很重要比如说具体页面的url. 有了它才能重定位到具体的每一章节的具体网页.

一、目标分析

我们已经从目录页完成了每个章节的url的提取. 我们先看看章节网页的具体结构.

F12,选中文字部分,观察一下内容的排布方式.

发现都是属于如下的div中. 但是很奇怪内容并没有标签,都是笼统的存在于块之下的。

然后还要很多换行。

在这里插入图片描述

看来还是比较简单…

二、内容的爬取

新的网页首先要判断的是编码的类型,尤其是中文比较多的网页。 在这里插入图片描述 他说是gbk,但是呢。。。不是啊,起码我们的目标内容不是。

gb2312 # 实际编码
gbk # apparent_encoding
Traceback (most recent call last):
  File "c:\Users\asus\Desktop\python\everyday\08\xiuzhen_spider.py", line 132, in 
    page_html = page_rep.text.encode('gbk').decode('gbk')
UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd' in position 5503: illegal multibyte sequence

我们可以先运行一个实例,看看一个网页能不能成功

   page_rep = requests.get('https://www.zhhbq.com/1_1852/835564.html') # 可以挑一个
   print(page_rep.encoding)
   print(page_rep.apparent_encoding)
   page_rep.encoding = page_rep.apparent_encoding # 编码转化一下使用gbk编码

xpath操作以来很方便。

page_html.xpath('//div[@id="content"]/text()')

不过记住返回的是一个列表。

三、内容的处理

我们希望能保存这些文本以后本地阅读,不是吗?

base_dir = "xiaoshuo" # 保存的文件夹
import os
os.system('mkdir xiaoshuo') # 创建目录
for i in range(len(href_list[:10])): # 跑一个小规模的实例,前十章
    save_handle = open(base_dir+"/"+filter_list[i]+".txt","w",encoding='utf-8') # 为了允许更多非中文格式的字符输出用utf-8

    txt_list = []
    page_rep = requests.get(href_list[i])
    print(page_rep.encoding)
    print(page_rep.apparent_encoding)
    page_rep.encoding = page_rep.apparent_encoding # 编码转化一下
    page_html = page_rep.text# .encode('gbk').decode('gbk')
    
    page_html  = etree.HTML(page_html)

    for line in page_html.xpath('//div[@id="content"]/text()'): # 实际只有一个text不要循环,不过无所谓,反正返回的是列表
        txt_list.append(line)

    txt_str = "\n".join(txt_list)
    save_handle.write(txt_str)

因为有三千多章,所以只运行一个小规模的Demo。 filter_list是前面文章得到的章节名称。

章节目录的爬取

成功!!! 在这里插入图片描述

总结

整体的过程还是比较简单的。

但是我们代码都是流的形式。

我们可以封装成函数。然后不同的小说也能去复用!!!

这就交给各位了。

另外呢,爬取下来的文件格式不够好看,比较宽松。最后也有广告信息,可以通过文件处理去除。

延伸阅读:

关注
打赏
1663165558
查看更多评论
立即登录/注册

微信扫码登录

0.0354s