博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初次尝试python爬虫,爬取小说网站的小说。
阅读量:5081 次
发布时间:2019-06-12

本文共 2150 字,大约阅读时间需要 7 分钟。

本次是小阿鹏,第一次通过python爬虫去爬一个小说网站的小说。

下面直接上菜。

  1.首先我需要导入相应的包,这里我采用了第三方模块的架包,requestsrequests是python实现的简单易用的HTTP库,使用起来比urllib简洁很多,因为是第三方库,所以使用前需要cmd安装。

  cmd安装方式,打开cmd,输入以下命令:

                    pip install requests

  2.添加相应的包后,我们需要一个小说链接去爬下这本小说也就是一个url。下面是我当时爬的小说url:http://www.shujy.com/5200/244309/

  3.我们现在有了小说的链接,这时候就要模拟浏览器发送http的请求: 

response=requests.get(url)response.encoding='gbk'

 

   4.我们可以尝试获取目标小说的网页源码 

html=response.text

  我们把它打印出来看下:

  

  有html基础的朋友应该对这些很熟悉。通过打印我们可以看见小说的名字,作者,以及小说章节的url。这时候我们就先通过HTML网页源码获取小说的名字:

title=re.findall(r'
',html)[0]

  从上面的代码我们可以看见是通过正则表达式去匹配的,对正则表达式有疑问的同学可以自行百度下。当然不同网站的具体小说名字可能会放在不同的标签里,需要我们打开网页源码去看看下。

  5.这时候我们也就新建一个文本文件来保存小说内容。

fb=open('%s.txt'% title,'w',encoding='utf-8')

  这时候我们需要获取小说的章节目录对应的url,我们还是来观察下网页的源码。我们通过火狐浏览器的f12看下网页可发现:

  小说的章节目标都在标签<div id='list'>里我们通过下面的代码获取对应的章节名和url。用一个list来存放章节信息。

dl=re.findall(r'
.*?
',html,re.S)[0]chapter_info_list=re.findall(r'(.*?)',dl)

   6.这个时候我们循环每一章节,分别下载,先把章节的链接,章节名提取出来。

for chapter_info in chapter_info_list:    chapter_url,chapter_title=chapter_info    chapter_url="http://www.shujy.com/5200/244309/%s " % chapter_url    chapter_url=chapter_url.replace(' ','')

  我们可以看见对章节的链接进行的拼接,因为我们可以看见直接提取出来的链接是这样的:

  所以也就需要一个拼接的操作,取得完整的章节链接。

  这个时候来下载小说内容:

chapter_response=requests.get(chapter_url,headers=headers)    chapter_response.encoding='gbk'    chapter_html=chapter_response.text

我们先是获取到小说具体章节的页面。打开具体小说章节f12查看网页的源码:

  可以清楚的看见小说的具体内容是在标签<div id=content>里,和获取小说章节一样我们采用正则表达式来取得小说的内容。

chapter_content=re.findall(r'
(.*?)
',chapter_html,re.S)[0]

我们把获取到的小说的内容打印出来看看,

  我们看见一些奇怪的字符&nbsp,<br/>等,我们在实际的小说里没有这些东西,这里就需要我们处理数据。进行一些操作,也叫做数据的清洗。

chapter_content=chapter_content.replace(' ','')    chapter_content=chapter_content.replace('
','') chapter_content=chapter_content.replace('&t;','')

  清洗后的小说内容:

  7.现在就是最后一步把小说保存到本地。

fb.write(chapter_title)    fb.write('\n')    fb.write(chapter_content)    fb.write('\n')    print(chapter_url,chapter_title)

  我们来看下最后的结果,我们每爬完一章打印相应的章节链接信息和返回的response信息来看是否成功爬取:

  当当当当,成功的爬下了这边小说。

  

  最后总结下,本次的爬虫就很简单是小阿鹏的初次尝试,中间如果有不对的地方也希望大家的指正,谢谢!

 

转载于:https://www.cnblogs.com/mumu597/p/11355787.html

你可能感兴趣的文章
关于jsp中的Unable to compile class for JSP解决
查看>>
mid
查看>>
转 --- socket模块中的各种方法
查看>>
sql server2008随笔
查看>>
一篇文章搞懂柏林噪声算法,附代码讲解
查看>>
SecureCRT无法连接虚拟机Linux—虚拟网卡(NAT方式)IP(169.254.xx.xx)无效问题
查看>>
防篡改对象
查看>>
HTML5图片上传本地预览
查看>>
xml/dom/sax
查看>>
2186: [Sdoi2008]沙拉公主的困惑 - BZOJ
查看>>
排序算法C语言实现——冒泡、快排、堆排对比
查看>>
解决 分布式事务中HRESULT:0x8004D025 错误
查看>>
Nginx tcp限制并发、IP、记日志
查看>>
Redhat Enterprise Linux 6.4图形界面的中文问题
查看>>
1093: [ZJOI2007]最大半连通子图
查看>>
修改器 $inc 增加和减少
查看>>
楼梯式定位导航系统
查看>>
python基础-面向对象编程
查看>>
【C#】wpf中的xmlns命名空间为什么是一个网址,代表了什么意思(转载)
查看>>
国内linux 镜像
查看>>