Python 爬虫十六式 - 第八式:实例解析-全书网

实例解析- 全书网

学习一时爽,一直学习一直爽javascript

  Hello,你们好,我是Connor,一个从无到有的技术小白。前面咱们就算是把全部的网页访问与网页解析的方法给你们讲完了。为了帮助你们更好的使用这些方法。咱们专门抽出一期,来作一个例子,看看在实际应用中咱们是如何使用前面的这些知识的。html

  好吧,那咱们快点开始。本期,咱们以全书网为例,来爬取全书网的小说下面咱们就开始进行分析吧,下面是全书网的网址:java

www.quanshuwang.com/python

1. 初步爬取

  无论爬取什么网站,咱们第一步要作的都是来分析这个网站。因此咱们先来打开全书网,分析一下这个网站:多线程

1.1 分析全书网

1.1.1 分析目标网址

  咱们想要从网上获取信息,就要知道这个信息的地址,咱们把它叫作目标网址,因此咱们先要分析目标网址:post

  能够看到首页有许多小说,可是这些地址并非咱们的目标网址,由于咱们想要的是具体的小说的章节内容,因此咱们须要再次寻找。咱们以《盗墓笔记》的第一章为目标,咱们继续来寻找目标网址:学习

  这个页面也不是咱们的目标网址,可是它里面包含有目标网址,即 《盗墓笔记》第一章的详情页地址在其中,咱们能够点击第一章来查看咱们的目标网址:网站

  当咱们点击了第一章的链接后,咱们又一次进入了一个新的页面,这个页面有了具体的小说内容。因此这一页使咱们须要的内容了。也就是说这一页的网址是咱们真正须要的目标网址。编码

1.1.2 分析网页源代码

  咱们如今找到了咱们须要的目标网址了。可是还有一个问题。咱们所能提取的内容必定是在网页源代码里拥有的内容。由于咱们访问网页所返回的响应就是网页源代码。这篇小说的正文在网页源代码中吗?咱们再来看一下这个页面的网页源代码:url

  仔细一看网页源代码,里面有咱们想要的内容。那咱们如今就能够开始进行网页访问,而后获取这章小说的内容了。

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>&nbsp;&nbsp;)(.*?)(<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>&nbsp;&nbsp;)(.*?)(<script type="text/javascript">)', response.text, re.S)
print(re.sub('&nbsp;|<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>&nbsp;&nbsp;)(.*?)(<script type="text/javascript">)', response.text, re.S)
content = re.sub('&nbsp;|<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:用匹配来演绎变成的艺术 >>>

相关文章
相关标签/搜索