Python 爬虫十六式 - 第八式:实例解析 - 全书网
实例解析- 全书网
学习一时爽,一直学习一直爽
Hello,大家好,我是Connor,一个从无到有的技术小白。前面我们就算是把所有的网页访问与网页解析的方法给大家讲完了。为了帮助大家更好的使用这些方法。我们专门抽出一期,来做一个例子,看看在实际应用中我们是如何使用前面的这些知识的。
好吧,那我们快点开始。本期,我们以全书网为例,来爬取全书网的小说下面我们就开始进行分析吧,下面是全书网的网址:
http://www.quanshuwang.com/
1. 初步爬取
不管爬取什么网站,我们第一步要做的都是来分析这个网站。所以我们先来打开全书网,分析一下这个网站:
1.1 分析全书网
1.1.1 分析目标网址
我们想要从网上获取信息,就要知道这个信息的地址,我们把它叫做目标网址,所以我们先要分析目标网址:
可以看到首页有许多小说,但是这些地址并不是我们的目标网址,因为我们想要的是具体的小说的章节内容,所以我们需要再次寻找。我们以《盗墓笔记》的第一章为目标,我们继续来寻找目标网址:
这个页面也不是我们的目标网址,但是它里面包含有目标网址,即 《盗墓笔记》第一章的详情页地址在其中,我们可以点击第一章来查看我们的目标网址:
当我们点击了第一章的连接后,我们又一次进入了一个新的页面,这个页面有了具体的小说内容。所以这一页使我们需要的内容了。也就是说这一页的网址是我们真正需要的目标网址。
1.1.2 分析网页源代码
我们现在找到了我们需要的目标网址了。但是还有一个问题。我们所能提取的内容一定是在网页源代码里拥有的内容。因为我们访问网页所返回的响应就是网页源代码。这篇小说的正文在网页源代码中吗?我们再来看一下这个页面的网页源代码:
仔细一看网页源代码,里面有我们想要的内容。那我们现在就可以开始进行网页访问,然后获取这章小说的内容了。
1.1.3 分析所需内容
我们通过分析网页源代码,认定我们可以通过直接访问来获取我们所需要的内容。但是我们访问所返回的网页源代码中全部都是我们所需要的内容吗?很明显不是这样的。因此我们还需要进一步分析所需内容,来为我们访问后的提取做准备。
通过分析,我们发现我们所有需要的内容全部都在 <div class="mainContenr" id="content">
这个标签下,所以确定了所需内容,我们就可以开始进行爬取了。
1.2 爬取全书网
1.2.1 访问目标网址
好,我们把该分析的东西都分析了,现在就是来使用我们学过的知识来获取我们想要的内容的时候了。首先我们来访问我们分析出的目标网址:
import requests
url = 'http://www.quanshuwang.com/book/9/9055/9674264.html'
response = requests.get(url).text
print(response)
运行结果:
看运行结果看得出,我们已经访问成功了,获取到了这个网址的网页源代码。但是我们发现里面有好多乱码,我们不认识的东西。如果你还记得我的第三式 requests 的话,你应该有印象我说过网页编码问题。那么我们来改一下代码,解决这个问题:
import requests
url = 'http://www.quanshuwang.com/book/9/9055/9674264.html'
response = requests.get(url)
response.encoding = 'gbk'
print(response.text)
运行结果:
乱码问题一下子就解决了。那我们现在获取到了网页源代码,下面就是要提取所需内容了,我们前面分析过了,下面我们来进行提取:
import requests
import re
url = 'http://www.quanshuwang.com/book/9/9055/9674264.html'
response = requests.get(url)
response.encoding = 'gbk'
result = re.search(r'(</script> )(.*?)(<script type="text/javascript">)', response.text, re.S)
print(result.group(2))
运行结果:
一下子就把我们想要的东西提取出来了对吧?但是你会发现里面还是有些乱七八糟的东西并不属于文章的正文。我们不想要这些东西,只想要文章正文怎么办?这个时候就需要用到我们前面学习的使用各种提取方法来提取网页内容了。我们以正则为例,来看看如何提取:
import requests
import re
url = 'http://www.quanshuwang.com/book/9/9055/9674264.html'
response = requests.get(url)
response.encoding = 'gbk'
result = re.search(r'(</script> )(.*?)(<script type="text/javascript">)', response.text, re.S)
print(re.sub(' |<br />', '', result.group(2)))
我们来看看运行结果如何?
&emps;可以看到,我们把所有的无用的字符都过滤掉了。这样就获取了我们想要的小说。获取到了我们想要的小说,下面我们来把获取到的数据来保存到txt文件中。
我们运行下面的程序:
import requests
import re
url = 'http://www.quanshuwang.com/book/9/9055/9674264.html'
response = requests.get(url)
response.encoding = 'gbk'
result = re.search(r'(</script> )(.*?)(<script type="text/javascript">)', response.text, re.S)
content = re.sub(' |<br />', '', result.group(2))
with open('dmbj.txt', 'w') as f:f.write(content)
执行完成之后,我们可以看一下保存的txt内容:
这样就保存好了。到这里我们就完成了对全书网的简单爬取。
2. 进一步爬取
我们可以简单地进行某一章的小说的爬取。但是如果我们想要爬取整部小说呢?难道我们需要把每一章的url都写出来然后进行逐一爬取吗?这太麻烦了。而且并不实用。那下面我们来看看如何完整的爬取一部小说的完整章节。
2.1 获取每一篇小说的网址
你是否还记得我们前面看到的一个页面?那一个网页上有整个小说的所有章节的目录。我们可以通过这里来获取所有章节的url。
那我们再来分析这个网页来获取所有章节的url。首先我们来分析一下网页的源代码:
查看网页源代码,我们可以看到所有的章节连接都在网页源代码中。我们同样可以通过直接访问来进行提取:
import requests
import re
url = 'http://www.quanshuwang.com/book/9/9055'
response = requests.get(url)
response.encoding = 'gbk'
result = re.findall(r'<li><a href="(http://www.quanshuwang.com/book.*?)".*?>(.*?)</a></li>', response.text, re.S)
print(result)
通过这段代码,我们可以获取所有的网页网址和章节标题。我们可以看下运行结果:
所有的章节地址和章节标题我们就都获取出来了。我们可以通过遍历列表来进行每一章的内容获取。这一部分只需要重复前面的内容即可。就不再多做解释了。
当然,由于程序是单线程的,之一的遍历列表来获取文章的方式相对来说太慢了。并没有什么实用价值。我们可以通过线程池的方法来避免阻塞,从而实现加速的效果。多线程和线程池我们也会在之后的系列为大家进行讲解。
例子举得都是最简单的例子。这个网站并没有任何的反爬措施,所以作为初级的入门非常好用。但是在实际的生产中。网站会有各种各样的反爬措施。我们也会在该系列后续的文章中谈到如何突破反爬。
下期预告
现在我们都会简单的爬取了。但是有些网站上获取不到我们想要的数据,那我们还有方式来获取我们想要的数据吗?当然有,那就是selenium来进行爬取了。敬请期待下一期: Python 爬虫十六式 - 第九式:selenium - 轻松获取数据!
好了,这就是我们这期的内容了,举了一个非常简单的例子。不知道你今天是否对前面的内容有了一个更高层次的认识了呢?我是 Connor 一个从无到有的技术小白,愿你在学习的道路上能够坚持不懈,砥砺前行!
系列文章
Python 爬虫十六式 - 第一式:HTTP协议 >>>
Python 爬虫十六式 - 第二式:urllib 与 urllib3 >>>
Python 爬虫十六式 - 第三式:Requests的用法 >>>
Python 爬虫十六式 - 第四式: 使用Xpath提取网页内容 >>
Python 爬虫十六式 - 第五式:BeautifulSoup-美味的汤 >>>
Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery >>>
Python 爬虫十六式 - 第七式:RE:用匹配来演绎编程的艺术 >>>
Python 爬虫十六式 - 第八式:实例解析 - 全书网相关推荐
- Python 爬虫十六式 - 第八式:实例解析-全书网
实例解析- 全书网 学习一时爽,一直学习一直爽 Hello,大家好,我是Connor,一个从无到有的技术小白.前面我们就算是把所有的网页访问与网页解析的方法给大家讲完了.为了帮助大家更好的使用这些 ...
- Python爬虫十六式 - 第三式:Requests的用法
Requests: 让 HTTP 服务人类 学习一时爽,一直学习一直爽 Hello,大家好,我是Connor,一个从无到有的技术小白.今天我们继续来说我们的 Python 爬虫,上一次我们说到了 ...
- Python 爬虫十六式 - 第七式:RE:用匹配来演绎编程的艺术
RE:用匹配来演绎编程的艺术 学习一时爽,一直学习一直爽 Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 pyquery 今天我们将迎来我们数据匹配部分的最后一位 ...
- Python 爬虫十六式 - 第七式:正则的艺术
RE:用匹配来演绎编程的艺术 学习一时爽,一直学习一直爽 Hello,大家好,我是 Connor,一个个从无到有的技术小白.上一次我们说到了 pyquery 今天我们将迎来我们数据匹配部分的最后一 ...
- Python爬虫十六式 - 第四式: 使用Xpath提取网页内容
Xpath:简单易用的网页内容提取工具 学习一时爽,一直学习一直爽 ! Hello,大家好,我是Connor,一个从无到有的技术小白.上一次我们说到了 requests 的使用方法.到上节课为止, ...
- Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery
PyQuery:一个类似jquery的python库 学习一时爽,一直学习一直爽 Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 BeautifulSoup 美味 ...
- Python 爬虫十六式 - 第一式:HTTP协议
HTTP:伟大而又无闻的协议 学习一时爽,一直学习一直爽! Hello,大家好啊,我是Connor,一个从无到有的技术小白.有的人一说什么是HTTP协议就犯愁,写东西的时候也没想过什么是HTTP协 ...
- python jsonpath库_Python爬虫(十六)_JSON模块与JsonPath
本篇将介绍使用,更多内容请参考:Python学习指南 数据提取之JSON与JsonPATH JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是的人们很容易 ...
- 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
最新文章
- 进击的 Kubernetes 调度系统(一):Kubernetes scheduling framework
- python格式化字符串_Python笔记7:三种方式构建字符串-格式化
- 如何获得C4C里某个code字段对应的描述信息
- 【JavaWeb】一文Servlet全解:继承关系、生命周期、容器和请求转发与重定向等
- php制作图片轮播_图片轮播效果实现方法
- Mysql 远程连接的问题 2003 - Can't connect to MySQL server on '39.106.187.107' (60 Operation timed out)...
- 【DevCloud· 敏捷智库】如何进行需求结构化管理?
- python绘制矩形图_Python。在底图中绘制矩形
- vue-cli关闭eslint及配置eslint
- 数据库系统概论第五版(第 2 章 关系数据库)习题答案
- 免费的网络验证系统插件
- 查看nvidia gpu共享内存大小
- 如何用Python开发QQ机器人
- 怎么学编程?学编程黄金4步,太多人卡在了第二步!
- usc week 5 计算几何(包含凸包) 队内练习题
- linux设备模型十二(热拔插hotplug)
- CAS机制以及简单实现
- 为什么说期货交易者依靠程序化交易系统接口才能获得成功
- 腾讯秋招面经(WXG一面+面委一面+面委二面)
- Ray入门指南(2)----Ray API