Python爬虫 | 爬取全书网小说斗罗大陆

news/2024/7/19 10:42:28 标签: 爬虫, python, 爬取

网络爬虫:可以理解成网页蜘蛛,在网页上采集数据

爬取流程:

1、导入模块

2、打开网页,获取原码

3、获取章节原码

4、获取正文

5、过滤‘杂质’

6、保存下载 


废话不多说开始爬!!!

今天爬的网站是  全书网—斗罗大陆 

 

准备工作、首先我们先导入两个模块

python">import urllib.request    #打开和浏览url中内容 
import re                #匹配我们需要的内容

第一步、打开网站,获得源代码

python">import urllib.request
import re
def run():
    html = urllib.request.urlopen("http://www.quanshuwang.com/book/1/1379").read()  #打开网站链接,并储存下来
    html = html.decode('gbk')   #将 字节 --->>> str
    print(html)
run()

运行结果就是获取到了网页的源代码,由于太长了,挑重点的往上复制 ,可以看出网页源代码存在我们想要的信息,每篇文章的网页链接,我们想要获取到,就需要用到re正则表达式了。

(-----------------------此处省略了一堆--------------------------)

<li><a href="http://www.quanshuwang.com/book/1/1379/7392650.html" title="引子 穿越的,共2712字">引子 穿越的</a></li>
<li><a href="http://www.quanshuwang.com/book/1/1379/7392651.html" title="第一章 ,异界唐三 一,共2082字">第一章 ,异界唐三 一</a></li>
<li><a href="http://www.quanshuwang.com/book/1/1379/7392652.html" title="第一章 ,异界唐三 二,共2117字">第一章 ,异界唐三 二</a></li>
<li><a href="http://www.quanshuwang.com/book/1/1379/7392653.html" title="第一章 ,异界唐三 三,共2109字">第一章 ,异界唐三 三</a></li>
<li><a href="http://www.quanshuwang.com/book/1/1379/7392654.html" title="第一章 ,异界唐三 四,共1967字">第一章 ,异界唐三 四</a></li>
<li><a href="http://www.quanshuwang.com/book/1/1379/7392655.html" title="第二章 废武魂与先天满魂力 一,共1920字">第二章 废武魂与先天满魂力 一</a></li>
<li><a href="http://www.quanshuwang.com/book/1/1379/7392656.html" title="第二章 废武魂与先天满魂力 二,共1956字">第二章 废武魂与先天满魂力 二</a></li>
(-----------------------此处省略了一堆--------------------------)

第二步、获取章节源代码 

python">import urllib.request
import re
def run():
    html = urllib.request.urlopen("http://www.quanshuwang.com/book/1/1379").read()  #打开网站链接,并储存下来
    html = html.decode('gbk')   #将 字节 --->>> str
    get_url =re.compile(r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>') #设置匹配的条件
    get_html_url =re.findall(get_url,html) #开始匹配
    print(get_html_url) #输出一下看看
run()

 运行结果就是我们获得了一个列表,列表里有包含章节url和文章标题的元组,然后我们就可以通过遍历获取每个章节的url然后再进行和第一步一样的事情,获取章节所在页面的原码。

D:\alien_invasion\venv\Scripts\python.exe D:/alien_invasion/venv/斗罗大陆_爬虫/get_斗罗大陆.py
[('http://www.quanshuwang.com/book/1/1379/7392650.html', '引子 穿越的'), ('http://www.quanshuwang.com/book/1/1379/7392651.html', '第一章 ,异界唐三 一'), ('http://www.quanshuwang.com/book/1/1379/7392652.html', '第一章 ,异界唐三 二'), ('http://www.quanshuwang.com/book/1/1379/7392653.html', '第一章 ,异界唐三 三'),

(-----------------------此处省略了一堆--------------------------)

('http://www.quanshuwang.com/book/1/1379/7393365.html', '第二百三十五章 完美融合之双神战双神'), ('http://www.quanshuwang.com/book/1/1379/7393366.html', '第二百三十六章 大结局,最后一个条件')]

 通过遍历列表,利用索引  url[0]  方式,获取网页链接

python">import urllib.request
import re
def run():
    html = urllib.request.urlopen("http://www.quanshuwang.com/book/1/1379").read()  #打开网站链接,并储存下来
    html = html.decode('gbk')   #将 字节 --->>> str
    get_url =re.compile(r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>') #设置匹配规则
    get_html_urls =re.findall(get_url,html)  #匹配
    for url in get_html_urls:      #遍历每个url
        content_h = urllib.request.urlopen(url[0]).read()  #根据每个url获取页面原码
        content_html = content_h.decode('gbk')
        print(content_html)
       
run()

结果没问题,不信你自己搞下

4.获取正文 

利用re正则获取正文

python">import urllib.request
import re
def run():
    html = urllib.request.urlopen("http://www.quanshuwang.com/book/1/1379").read()  #打开网站链接,并储存下来
    html = html.decode('gbk')   #将 字节 --->>> str
    get_url =re.compile(r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>') #设置匹配规则
    get_html_urls =re.findall(get_url,html)  #匹配
    for url in get_html_urls:      #遍历每个url
        content_h = urllib.request.urlopen(url[0]).read()  #根据每个url获取页面原码
        content_html = content_h.decode('gbk')
        reg = re.compile(r'</script>&nbsp;&nbsp;&nbsp;&nbsp;(.*?)<script type="text/javascript">',re.S) #设置匹配规则
        content = re.findall(reg,content_html)     #匹配
        print(content)
run()

可以看出我们抓出的正文存在在一个列表中,但是中间有我们不想要的信息,比如: &nbsp;&nbsp;&nbsp;&nbsp; 或者 <br />

['新书小三先开通了,方便书友们收藏。本书会在12月20曰,《琴帝》结束的同时同步开始更新。保持小三一贯的不断更衔接传统。小三相信,这本书将会给书友们带来更大的惊喜。多谢大家的支持<br />\r\n<br />\r\n&nbsp;&nbsp;&nbsp;&nbsp;---------------------------------------<br />\r\n<br />\r\n&nbsp;&nbsp;&nbsp;&nbsp;巴蜀,历来有天府之国的美誉,其中,最有名的门派莫过于唐门。<br />\r\n<br />\r\n&nbsp;&nbsp;&nbsp;&nbsp;唐门所在是一个神秘的地方,许多人只知道,那是一个半山腰,而唐门所在这座山的山顶有一个令人胆颤心惊的名字,——鬼见愁。<br />\r\n<br />\r\n&nbsp;&nbsp;&nbsp;&nbsp;从鬼见愁悬崖上扔出一块石头,开了这个世界,但他的另一次命运却刚刚开始。<br />\r\n<br />\r\n&nbsp;&nbsp;&nbsp;&nbsp;----------------------------------------<br />\r\n<br />\r\n&nbsp;&nbsp;&nbsp;&nbsp;大家自然看得出,书里的小三穿越了。他将来到另一个世界,一个充斥着全新设定的世界。这本新书的设定,小三足足构思了半年时/>\r\n&nbsp;&nbsp;&nbsp;&nbsp;本集预告:唐门外门弟子唐三,因偷学内门绝学为唐门所不容,跳崖明志时却来到了另一个世界,这是一个武魂的世界。

------------------------------省略了一堆-----------------------

而立志修炼唐门绝技的唐三,会去修炼他的武魂么他的武魂又是什么呢请阅本集。<br />\r\n<br />\r\n&nbsp;&nbsp;&nbsp;&nbsp;本来小三还想发个本集人物设定出来,但后来一想,还是先保留了,不过悄悄告诉大家,在出场人物中,会有惊喜。嘿嘿。']

 5.过滤杂质

我们用replace函数替换掉我们不需要的杂质。

python">import urllib.request
import re
def run():
    html = urllib.request.urlopen("http://www.quanshuwang.com/book/1/1379").read()  #打开网站链接,并储存下来
    html = html.decode('gbk')   #将 字节 --->>> str
    get_url =re.compile(r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>') #设置匹配规则
    get_html_urls =re.findall(get_url,html)  #匹配
    for url in get_html_urls:      #遍历每个url
        content_h = urllib.request.urlopen(url[0]).read()  #根据每个url获取页面原码
        content_html = content_h.decode('gbk')
        reg = re.compile(r'</script>&nbsp;&nbsp;&nbsp;&nbsp;(.*?)<script type="text/javascript">',re.S) #设置匹配规则
        content = re.findall(reg,content_html)     #匹配
        content = content[0].replace('&nbsp;&nbsp;&nbsp;&nbsp;',' ').replace('<br />',' ')  #将杂质替换成空格
        print(content)
run()

这样就得到我们需要的文章了 

新书小三先开通了,方便书友们收藏。本书会在12月20曰,《琴帝》结束的同时同步开始更新。保持小三一贯的不断更衔接传统。小三相信,这本书将会给书友们带来更大的惊喜。多谢大家的支持 
 
 --------------------------------------- 

 巴蜀,历来有天府之国的美誉,其中,最有名的门派莫过于唐门。 
 
------------------------再次省略一堆----------------------------------

他也一定会很欣慰,他的努力终究没有白费。可是,这一切都来的太迟了一些。 
 
 鬼见愁,那扔下一块石头也要数上十九秒,似乎超越十八层地狱的存在,又怎么可能允许一个活人被云雾释放而归唐三走了,他永远的离开了这个世界,但他的另一次命运却刚刚开始。 

6.写入文件 

python">import urllib.request
import re
def run():
    html = urllib.request.urlopen("http://www.quanshuwang.com/book/1/1379").read()  #打开网站链接,并储存下来
    html = html.decode('gbk')   #将 字节 --->>> str
    get_url =re.compile(r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>') #设置匹配规则
    get_html_urls =re.findall(get_url,html)  #匹配
    for url in get_html_urls:      #遍历每个url
        content_h = urllib.request.urlopen(url[0]).read()  #根据每个url获取页面原码
        content_html = content_h.decode('gbk')
        reg = re.compile(r'</script>&nbsp;&nbsp;&nbsp;&nbsp;(.*?)<script type="text/javascript">',re.S) #设置匹配规则
        content = re.findall(reg,content_html)     #匹配
        content = content[0].replace('&nbsp;&nbsp;&nbsp;&nbsp;',' ').replace('<br />',' ')  #将杂质替换成空格
        with open(url[1]+'.txt','w')as a:           #写文件,并以章节名称命名
            a.write(content)
run()

一个简单的爬虫就KO了!开心吧! 


http://www.niftyadmin.cn/n/997630.html

相关文章

Exception与相关

怎么写一个exception类, 直接抛出去&#xff0c;主要是写一个构造函数里面的Msg消息&#xff0c;这个可以提前写出来。 try...catch..finally 一般都是一起的&#xff0c;try 中有异常执行语句&#xff0c; catch中捕获异常&#xff0c;完成后要经过finally子句。一般try中执行…

Python爬虫 | 打开网页获取原码的几种方式

1. 打开页面获取源代码 1.1 urllib模块 import urllib.request html urllib.request.urlopen(https://movie.douban.com/subject/3168101/?fromshowing).read() html html.decode(utf-8) print(html) 1.2 requests模块 import requests html requests.get(https://movie.…

js中__proto__和prototype的区别和关系?

为什么80%的码农都做不了架构师&#xff1f;>>> 初学javascript的时候也跟题主一样搞不清楚&#xff0c;自己好好总结了一下&#xff1a; 首先&#xff0c;要明确几个点&#xff1a; 1.在JS里&#xff0c;万物皆对象。 方法&#xff08;Function&#xff09;是对象…

Linux环境下创建FTP用户

1. 安装vsFTPd&#xff1a;在shell下运行yum install vsFTPd&#xff0c;即可安装成功&#xff1b;2. 修改vsFTPd的配置&#xff1a;在/etc/vsFTPd/下找到vsFTPd.conf文件&#xff0c;修改默认配置&#xff0c;包括监听地址和端口&#xff0c;是否打开tcp、psav模式等等&#x…

Python爬虫(一) | urllib

urllib包含四个模块 request:发送http请求error:异常处理模块parse:一个工具模块&#xff0c;负责url处理robotparser:用来识别robot.txt1.发送请求 urllib.request import urllib.request #发送请求 response urllib.request.urlopen(urlhttp://python.org) print(type(res…

HashTable、HashMap、HashSet

1. HashMap 1) hashmap的数据结构 Hashmap是一个数组和链表的结合体&#xff08;在数据结构称“链表散列“&#xff09;&#xff0c;如下图示&#xff1a; 当我们往hashmap中put元素的时候&#xff0c;先根据key的hash值得到这个元素在数组中的位置&#xff08;即下标&#x…

SQL学习之T-SQL编程之标识符、变量、批处理与运算符

1、标识符&#xff1a;(1)定义&#xff1a;就像每个人都要有个名字一样&#xff0c;在SQL Server中&#xff0c;每一项对象也都要有一个作为标识用的名称&#xff0c;这就是标识符。例如数据库名称、数据表名称、字段名称等等&#xff0c;这些名称统称为标识符。(2)命名规则:a、…

swift项目中极光推送

2019独角兽企业重金招聘Python工程师标准>>> 极光推送博客&#xff1a;http://blog.csdn.net/wj610671226/article/details/51200988 转载于:https://my.oschina.net/u/2532095/blog/698457