Python从零开始写爬虫-4 解析HTML获取小说正文

在上一节中, 我们已经学会如何获取小说的目录, 这一节我们将学习如何通过正则表达式(在第二节学习过)来获取小说正文.

首先, 先随便选择一个章节, 作为例子, 我们就以 "吞噬星空第一章:罗峰"为例子, 来进行我们的学习.

首先依然式先获取该网页的源代码

import requests

r = requests.get('http://www.biquger.com/biquge/12928/4282781')

r.encoding = 'utf-8'

print(r.text)

通过分析源代码, 我们可以发现小说的正文被

...

包括. 那我们就可以通过正则表达式提取该部分内容即可.

使用正则表达式提取正文

按照我们之前所学的, 使用下列正则表达式搜索:

res = re.search(r'

((.)*?)

', r.text)

print(res)

可以发现, 没有搜索结果. 查看正则表达式说明文档, 发现 .是不匹配换行符, 而我们的小说正文不可能只有一行, 所以无法匹配. 我们的正文应该是所有字符加换行符, 应该使用: (.| ), 使用[. ]是不可以的, 原因我也不知道.

res = re.search(r'

((.| )*?)

', r.text)

text = res.group(1)

print(text)

我也经成功提取到了正文, 但是发现里面很多html的标记语言, 例如:&nbsp:,
等.下面我们将对提取到正文进行进一步的处理, 使其符合我们的阅读习惯.

处理正文

在html标记语言中,  表示空格,
表示换行符. 我们按照该要求替换正文中的内容.

text = text.replace(' ', ' ')

text = text.replace('
', ' ')

看起来好多, 但是有一个问题, 段与段之间的空行好像有点多啊, 通过print(repr(text))我们可以发现, 段与段之间存在四个换行符 , 正常情况, 段与段之间只有一个换行符, 我们需要将四个换行符替换成一个换行符.

text = text.replace(' ', ' ')

print(text)

发现空行处理好了, 但是在末尾还有一些我们不希望存在的文字出现, 他们被包裹在

(.| ) 之间.我们需要把他替换掉, str的replace是不支持正则表达式替换的, 我们需要使用re中sub.

text = re.sub(r'

(.| )*?', '', text)

print(text)

可以发现,现在的正文已经符合我们的阅读习惯了.

整理

将上面的内容整理成函数, 今天的学习就结束了

def parse(url):

r = requests.get(url)

r.encoding = 'utf-8'

res = re.search(r'

((.| )*?)

', r.text)

text = res.group(1)

text = text.replace(' ', ' ')

text = text.replace('
', ' ')

text = text.replace(' ', ' ')

text = re.sub(r'(.| )*?', '', text)

return text

总结

我们已经获得该章节的正文了, 在该学习中, 我们先通过requests获得小说正文网页的源代码, 然后通过re.search来获得小说的正文, 最后通过不断的处理, 最终获得我们希望的样子.但是注意: 每个以网站的格式都不一样, 甚至每一篇小说的格式都一样, 应根据情况处理正文.

python爬虫小说代码示例-Python从零开始写爬虫-4 解析HTML获取小说正文相关推荐

  1. python爬表情包_【从零开始写爬虫一】批量下载表情包

    序 打算写个关于node的爬虫菜鸟教程,接下来将带大家一步一步写一个表情包爬虫,从获取页面,解析表情包链接, 清洗脏数据,下载表情包到本地.开始之前你需要有对chrome调试工具和ES6有一定了解,包 ...

  2. python爬虫小说代码示例-使用简单Python爬虫获取一个干净整洁的小说文件

    打开小说所在界面,右击选择查看网页源代码 1.在头部能够看到'charset=utf-8'得知文件的编码为'uft-8'!,url=http://www.17k.com/list/2921315.ht ...

  3. python如何更新包_python如何更新包 python更新包代码示例

    python如何更新包?本篇文章小编给大家分享一下python更新包代码示例,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Python安装新包,pip是 ...

  4. python爬虫小说代码示例-中文编程,用python编写小说网站爬虫

    原标题:中文编程,用python编写小说网站爬虫 作者:乘风龙王 原文:https://zhuanlan.zhihu.com/p/51309019 为保持源码格式, 转载时使用了截图. 原文中的源码块 ...

  5. python爬虫代理的使用_从零开始写Python爬虫 --- 2.4 爬虫实践:代理的爬取和验证...

    爬网站的时候,由于各种原因,ip被锁了,这个时候我们就需要通过代理来突破封锁.网上有很多代理网站,付费和免费的都有,这次我们就来写一个scrapy爬虫,爬一些免费的代理下来用. 目标分析: 本次爬取了 ...

  6. python爬虫文件代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)...

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  7. HTTP代码示例-Python

    python使用华科隧道HTTP代理代码示例,这里只是一个简单的示例,具体要根据您实际情况使用. 1.Python requests #! -*- encoding:utf-8 -*- import ...

  8. 风控Python绘图技法代码示例

    最重要的事情开始都会讲:建模是始终服务于业务的,没有业务的评分卡就没有灵魂 承接风控建模篇第5节,现对各个细节点讲解 绘图元素代码示例 First part 位置决定身材 整体框架的布局 位置设置 画 ...

  9. python入门基础代码图-python入门代码指南教程书籍推荐2020总结全集汇总

    python入门代码指南教程书籍推荐2020总结全集汇总 记住,如果您想学习Python,市场上有很多可用的资源.这些可以包括书籍,甚至在线课程..在这篇文章中,我们为Python编写了最好的书籍,无 ...

最新文章

  1. 小程序给视频加默认图片封面,点击播放视频并停止播放上一个视频
  2. ISLR线性回归笔记
  3. ISE下载到FPGA内的文件格式
  4. java system.runfinalization()_Android中缓存理解(一)
  5. CrowdHuman 测试
  6. [MATLAB学习笔记] global声明全部变量
  7. 算法与数据结构 -- 栈与队列(四)
  8. Django视图(二)
  9. 通讯录小程序android,通讯录小程序,找回青春的回忆
  10. 如何学习IOS开发~三个字(学思做)
  11. java和php基础部分相同或异同
  12. Linux第九周作业
  13. 前端页面加载速度优化---Ngnix之GZIP压缩
  14. 零基础自学计算机方法大全
  15. 移动 ProgramData\Package Cache 文件夹
  16. android 10.0 SystemUI 状态栏下拉快捷添加截图快捷开关
  17. mac虚拟摄像头插件_macOS平台下虚拟摄像头的研发总结
  18. Laravel的ORM模型的find(),findOrFail(),first(),firstOrFail(),get(),list(),toArray()之间的区别是什么?
  19. 手把手教你写一个Matlab App(一)
  20. LESS 和 SCSS 的区别

热门文章

  1. python3 分割字符串(多分割符)
  2. pyhton 去除字典空值
  3. db2表结构导出导入,数据库备份
  4. 通过StringBuilder的reverse()实现倒序
  5. Android的消息机制简单总结
  6. 一个程序员眼中的好UI
  7. codeforces 501 C,D,E
  8. NodeAsp——像开发NodeJS应用一样玩转ASP
  9. AngularJS 指令之 ng-hide/ng-show
  10. Linux下多网卡MAC配置问题