一、背景:近期学习python爬虫中看到,在对网页内容进行解析的技术中,re正则表达式工具也是一个很好的工具,使用re编制爬虫工具正好熟悉re正则表达式的使用。

二、环境及爬取目标

1、linux centos7系统
2、小说网站:http://www.xbiquge.la/15/15158 ,小说名称《汉乡》。
三、爬取思路
1、爬取目录页面,获得章节链接和标题List列表文件
2、根据章节链接和标题List列表文件内容,逐一爬取小说各章节,并写入预设文件名。
四、代码实现(代码文件名:test7.py)
#-*- coding:utf-8 -*-
import requests
import re
#通过目录页面获取小说各章节链接和标题列表
url="http://www.xbiquge.la/15/15158/"
html=requests.get(url).content.decode("utf-8")      #获取目录页面内容
#print(html)
catalog=re.findall('<dd><a href=\'(/15/15158/\d+.html)\' >(.+?)</a></dd>', html, re.S)    #返回章节链接和标题List列表文件,其中?表示使用非贪婪模式。
#print(catalog[0], catalog[len(catalog)-1])    #测试显示起始和结束章节的链接和标题
 
#获取小说各章节内容并输出为预设文件
novelname="汉乡_test7.txt"
count_begin=0
#count_end=2  #调试用
count_end=len(catalog)
with open(novelname, mode="a", encoding="utf-8") as f:
        for i in range(count_begin,count_end):
            #print(catalog[i][0])
            url_c="http://www.xbiquge.la" + catalog[i][0]           #获得小说各章节的链接
            title=catalog[i][1] 
            print("正在下载----------", title)
            html_c=requests.get(url_c).content.decode("utf-8")       #获得章节页面
            #print(html_c)
            text_l=re.findall('<div id="content">(.*?)</div>', html_c, re.S)    #获得章节内容
            text1=text_l[0].replace('&nbsp;&nbsp;&nbsp;&nbsp;', '').replace('<br />', '\n').replace('\15', '')  #消除多余字符,其中\15是^M字符的八进制值
            text=re.sub(r'<p>.*?</p>', '', text1, 0, re.S)   #消除每个章节的广告段落,re.sub方法有五个参数:正则表达式规则、替代字符串、被替代的字符串、count、flag,count为0表示全部替换,flag设为re.S表示.代表的字符包含换行符\n。
            #print(text)
            f.write(title)
            f.write('\n\n')
            f.write(text)
            f.write('\n\n')
f.close()
 
五、运行:
(base) [python@ELK ~]$ python test7.py
正在下载---------- 第一章 预言
正在下载---------- 第二章 被烧焦了
正在下载---------- 第三章 虎外婆
正在下载---------- 第四章 始皇帝的太宰
正在下载---------- 第五章大人为上,礼为尊
......

学习使用re做解析器爬小说的更多相关文章

  1. 学习使用pyquery解析器爬小说

    一.背景:个人喜欢在网上看小说,但是,在浏览器中阅读小说不是很方便,喜欢找到小说的txt版下载到手机上阅读,但是有些小说不太好找txt版本,考虑自己从网页上爬一爬,自己搞定小说的txt版本.正好学习一 ...

  2. Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

    本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

  3. 学习SpringMVC——说说视图解析器

    各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...

  4. XML学习笔记——关于XML解析器

    本篇文章基于W3C而写 在Firefox及其他浏览器中的XML解析器(除IE) var xmlDoc=document.implementation.createDocument("&quo ...

  5. 高性能Java解析器实现过程详解

    如果你没有指定数据或语言标准的或开源的Java解析器, 可能经常要用Java实现你自己的数据或语言解析器.或者,可能有很多解析器可选,但是要么太慢,要么太耗内存,或者没有你需要的特定功能.或者开源解析 ...

  6. SpringMVC——说说视图解析器

    学习SpringMVC——说说视图解析器   各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请 ...

  7. vert.x学习(四),使用模板解析器ClassLoaderTemplateResolver

    在vert.x中使用模板解析,可以为我们带来很多方便.我这里学习了一下ClassLoaderTemplateResolver的简单使用.这次工程配置与上篇一样,不需要做任何多的配置.直接编写代码就可以 ...

  8. DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等

    DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组件 ...

  9. day89 DjangoRsetFramework学习---restful规范,解析器组件,Postman等

     DjangoRsetFramework学习---restful规范,解析器组件,Postman等           本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析 ...

随机推荐

  1. 【Spark】SparkStreaming与flume进行整合

    文章目录 注意事项 SparkStreaming从flume中poll数据 步骤 一.开发flume配置文件 二.启动flume 三.开发sparkStreaming代码 1.创建maven工程,导入 ...

  2. 【Scala】代码实现Scala的各种模式匹配操作

    文章目录 内容匹配 类型匹配 s表达式 case class 样例类 偏函数 内容匹配 import scala.util.Random object TestMatch { def main(arg ...

  3. Java 设置PDF中的文本旋转、倾斜

    本文介绍通过Java程序在PDF文档中设置文本旋转.倾斜的方法.设置文本倾斜时,通过定义方法TransformText(page);并设置page.getCanvas().skewTransform( ...

  4. Mysql常用sql语句(18)- union 全连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 其实Mysql并没有全连接,Oracle才有全连 ...

  5. idea 2020 配置本地 Maven 仓库

    问题: 默认Maven 仓库地址在C盘,C盘是系统盘能少放东西尽量少放. 只需要简单的两步 1.File~Settings 然后搜索 maven 如下图绿框 修改成你自己的 Maven 仓库 2.Fi ...

  6. [hdu5254]BFS

    题意:如果一个格子的相邻四个格子中存在两个格子被标记,且这两个格子有公共点,那么这个格子也被标记.给定初始的标记状态,求最终有多少个格子被标记了 思路: 依次对每个格子进行处理,看它能否”生成“新的被 ...

  7. 手机app传统邀请码安装与免邀请码安装区别,如何选择呢?

    App 邀请机制是每个产品几乎必做的功能点,它一般以两种形式存在:一是作为常置功能用于推荐,二是作为裂变活动用于邀请. 无论以哪种形式出现,都可以归为社交分享的一种表现方式.相较于营销推广,邀请好友机 ...

  8. mysql连表查空,查询第二张表中没有第一张表中的数据

    select consumer_id,user_name,mobile,invite_code from csr_consumer where invite_count<(select coun ...

  9. Spring全家桶之spring boot(五)

    Thymeleaf简介 Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发,模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#.PHP语言体系下也 ...

  10. vue+express上传头像到数据库中img的路径

    项目结构 express中间件指定静态资源目录 app.use("/static",express.static(path.join(__dirname,"/public ...