今天和大家分享一个爬取盗版小说的实例。

如今的网络小说可谓是百家齐放各领风骚,玄幻科幻穿越修仙都市… 各种套路看得我是心潮澎湃,笔者曾经也蛮喜欢看小说的,以前经常是拿着一台诺基亚看到深夜,第二天带着黑眼圈去上学。

以前看小说都是txt格式的文件,每次都需要拿着在电脑上搜索‘***txt小说免费下载’,往事不堪回首

学以致用,为了以后下载小说能够超微显得高端一点,今天就给大家分享一个爬取盗版小说的爬虫实例。

当然还是希望大家支持正版哈

这次我选择的网站是笔趣阁,一个可以免费在线看小说的网站,而且貌似可以免费直接下载(手动狗头)

在本实例中我们选择的是孑与2大大的经典之作《唐砖》

点开唐砖我们可以看到是这个样子的
(图片暂无)

查看原码后发现它的目录里面所有章节都存放在一个名为list的div里面,并且所有链接都可以直接访问

我们先用代码获取它的所有目录信息并存放在两个列表chaptername 和chapteraddress 中

def getchapter(html):soup = BeautifulSoup(html,'lxml')try:alist = soup.find('div',id='list').find_all('a')for list in alist:chaptername.append(list.string)href = 'http://www.paoshu8.com'+list['href']chapteraddress.append(href)return Trueexcept:print('未找到章节')return False

这样我们就得到了所有的章节信息,接下来只要遍历链接地址就可以得到每一节的详细内容

在每一节详细内容中我们发现,小说的文字都存放在了一个名为content的div里面,我们只需利用BeaufulSoup里面的find函数就可以找到这个div,并且我们可以看到,他的文字都是存放在了p标签里面,所以接下来我们再利用find_all函数找到div里面的所有p标签便可。

在这次爬虫中,我遇到的一个问题就是在小说中遇见了两个特殊符号,比如说’\u30fb’,’\u2660’,对于这样的错误,我直接用replace替代了这些特殊符号,最终不算很完整的爬完了整部小说。


下面上代码:

import requests
from bs4 import BeautifulSoup
import timestart = time.clock()
#获取页面html源码
def getpage(url):headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}page = requests.get(url).content.decode('utf-8')return pagechaptername = []  #存放小说章节名字
chapteraddress = []     #存放小说章节地址
#获取小说所有章节以及地址
def getchapter(html):soup = BeautifulSoup(html,'lxml')try:alist = soup.find('div',id='list').find_all('a')for list in alist:chaptername.append(list.string)href = 'http://www.paoshu8.com'+list['href']chapteraddress.append(href)return Trueexcept:print('未找到章节')return False#获取章节内容
def getdetail(html):soup = BeautifulSoup(html,'lxml')try:content = '     'pstring = soup.find('div',id='content').find_all('p')for p in pstring:content += p.string.replace('\u30fb','').replace('\u2660','')  #这是整个代码最简陋的地方,有可能出现各种的特殊符号中断程序,如果每次都需要replace的话太麻烦了content += '\n      'return contentexcept:print('出错')return '出错'url = 'http://www.paoshu8.com/0_840/'
html = getpage(url)
getchapter(html)file = open('C:/Users/Lenovo/Desktop/fiction.txt','w')  #小说存放在本地的地址
count = len(chapteraddress)
for i in range(len(chapteraddress)):curl = str(chapteraddress[i])chtml = getpage(curl)content = '\n' + getdetail(chtml) + '\n'  #为了保持小说有格式title = '\n           第'+str(i+1)+'章  '+str(chaptername[i])+'         \n'file.write(title+content)print('{:.3%}'.format(i/count)+'  '+chaptername[i])file.close()end = time.clock()print('下载完毕,总耗时',end-start,'秒')

以上代码还有很多地方需要完善。比如说每次下载小说的话都得先去小说网站查看网址才能进行下载,比较麻烦,所以我稍微进行了些修改,让程序仅需输入名字便可爬取网站里面任何小说。

import requests
from bs4 import BeautifulSoup
import time
import codecsstart = time.clock()#在小说大全界面获取所有小说名单
novellist = {}
def getnovels(html):soup = BeautifulSoup(html,'lxml')list = soup.find('div',class_='novellist').find_all('a')baseurl = 'http://www.paoshu8.com'for l in list:novellist[l.string] = baseurl+str(l['href']).replace('http:','')#获取页面html源码
def getpage(url):headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}page = requests.get(url).content.decode('utf-8')return pagechaptername = []  #存放小说章节名字
chapteraddress = []     #存放小说章节地址
#获取小说所有章节以及地址
def getchapter(html):soup = BeautifulSoup(html,'lxml')try:alist = soup.find('div',id='list').find_all('a')for list in alist:chaptername.append(list.string)href = 'http://www.paoshu8.com'+list['href']chapteraddress.append(href)return Trueexcept:print('未找到章节')return False#获取章节内容
def getdetail(html):soup = BeautifulSoup(html,'lxml')try:content = '     'pstring = soup.find('div',id='content').find_all('p')for p in pstring:content += p.stringcontent += '\n      'return contentexcept:print('出错')return '出错'url = 'http://www.paoshu8.com/xiaoshuodaquan/' #小说大全网址
html = getpage(url)
getnovels(html)  #获取小说名单name = input('请输入想要下载小说的名字:\n')
if name in novellist:print('开始下载')url = str(novellist[name])html = getpage(url)getchapter(html)file = codecs.open('C:/Users/Lenovo/Desktop/novellist/'+name+'.txt','w','utf-8')  #小说存放在本地的地址count = len(chapteraddress)for i in range(len(chapteraddress)):curl = str(chapteraddress[i])chtml = getpage(curl)content = '\n' + getdetail(chtml) + '\n'  #为了保持小说有格式title = '\n           第'+str(i+1)+'章  '+str(chaptername[i])+'         \n'file.write(title+content)print('{:.3%}'.format(i/count)+'  '+chaptername[i])file.close()end = time.clock()print('下载完毕,总耗时',end-start,'秒')
else:print('未找见该小说')

运行截图:

这是单线程版本的爬取器,如果想要加快下载速度,可以用多线程:python爬虫实例之——多线程爬取小说

以上便是本篇小说下载器的所有内容,祝愿我们共同进步,也希望我们早日打赢这场战疫!

python爬虫实例之小说爬取器相关推荐

  1. python爬虫实例之——多线程爬取小说

    之前写过一篇爬取小说的博客,但是单线程爬取速度太慢了,之前爬取一部小说花了700多秒,1秒两章的速度有点让人难以接受. 所以弄了个多线程的爬虫. 这次的思路和之前的不一样,之前是一章一章的爬,每爬一章 ...

  2. 使用 requests+lxml 库的 Python 爬虫实例(以爬取网页连载小说《撒野》为例)

    需求目标 介绍使用 requests 库与 lxml 库进行简单的网页数据爬取普通框架与爬虫实例,本文以爬取网页连载小说<撒野>为例~ 当然有很多小说基本都能找到现成的 .txt 或者 . ...

  3. python爬虫实例练习:爬取慕课网课程名称以及对应的链接

    1.安装与开发环境 模块安装: bs4 解析库安装:pip install bs4 开发环境: python 3.x + pycharm ps:文章来源于小编的头条号:"python数据科学 ...

  4. python爬虫初战之小说爬取

    废话不多说,上代码. 总体思路是构建函数然后循环. 函数分两块,第一个函数得到标题和每一章节的网址,第二个函数得到每一章节的具体内容,然后循环就ok. import urllib.request as ...

  5. python爬虫对炒股有没有用_使用python爬虫实现网络股票信息爬取的demo

    实例如下所示: import requests from bs4 import BeautifulSoup import traceback import re def getHTMLText(url ...

  6. python爬虫股票市盈率_使用python爬虫实现网络股票信息爬取的demo

    实例如下所示: import requests from bs4 import BeautifulSoup import traceback import re def getHTMLText(url ...

  7. 19. python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求 [前期准备] 2.分析及代码实现 (1)获取五大板块详情页url (2)解析每个板块 (3)解析每个模块里的标题中详情页信息 1.需 ...

  8. python爬虫——用Scrapy框架爬取阳光电影的所有电影

    python爬虫--用Scrapy框架爬取阳光电影的所有电影 1.附上效果图 2.阳光电影网址http://www.ygdy8.net/index.html 3.先写好开始的网址 name = 'yg ...

  9. python爬虫如何实现每天爬取微信公众号的推送文章

    python爬虫如何实现每天爬取微信公众号的推送文章 上上篇文章爬虫如何爬取微信公众号文章 上篇文章python爬虫如何爬取微信公众号文章(二) 上面的文章分别介绍了如何批量获取公众号的历史文章url ...

最新文章

  1. 刻意练习:Python基础 -- Task01. 变量、运算符与数据类型
  2. 函数计算+云市场实现手机号归属地和图片爬虫系统设计...
  3. mysql的sql_mode合理设置
  4. IAR 不能使用go to 的解决方法
  5. 解读JavaScript代码 var ie = !-[1,]
  6. scrapy splash 爬取图片学习心得
  7. ci框架 查询构造器类
  8. QT6.1.2下载和安装教程
  9. 增长黑客AB-Test系统(四)——AB-Test 最小样本量
  10. Vue3中数据更新函数effect的实现
  11. 美团笔试题 淘汰分数
  12. web 常见的攻击方式
  13. 软件测试面试中都会问到哪些关于Python的问题?
  14. linux下磁盘测速,linux下磁盘测速工具
  15. 基于国产银河飞腾多核 DSP +FPGA的图像识别硬件设计与算法实现
  16. 火车票是一门什么生意 「上篇」
  17. 上海浦东新区计算机学校排名2015,2015年上海市浦东新区初级中学最新排名.pdf
  18. 三星android 4.04,三星Galaxy note i889如何Odin线刷4.04
  19. IT奶爸带娃记之幼儿园选择困难症
  20. react17源码浅析

热门文章

  1. css中font-family和font-style的区别
  2. android:layout_marginLeft等的简单用法
  3. Salesforce Schedule
  4. [英语单词] cookie from chatGPT
  5. 各种加密算法简介(如MD5、SHA-256源码实现)
  6. C-学生个人消费管理系统
  7. 2014全国计算机等级考试报名时间,2014年下半年全国计算机等级考试时间安排
  8. ptp虚拟服务器配置,Trimble高精度网络授时服务器 PTP GM200
  9. 分布式中hash取模算法
  10. 千万不要在领导面前说这五种话