使用scrapy制作的小说爬虫

爬虫配套的django网站  https://www.zybuluo.com/xuemy268/note/63660

首先是安装scrapy,在Windows下的安装比较麻烦,大家好好百度下,这里就不细说了,在ubuntu下的安装

apt-get install python-dev
apt-get install python-lxml
apt-get install libffi-dev
pip install scrapy

爬取小说的话无非就是爬取两个页面,小说介绍页和小说章节页,然后又分为2种情况

  1. 小说介绍页中含有章节列表目录

  2. 小说介绍页中不含章节列表目录,但是含有指向章节列表的URL

相对于a情况来说:

def parse(self,response):
# 使用xpath,获取小说名,作者,分类,介绍,章节列表URL
#使用下面的方法获取章节列表URL可以直接使用Request(),还能直接获得章节名
#http://www.ydzww.comSgmlLinkExtractor(restrict_xpaths=(config.get("NovelChapterList_XPATH"),),).extract_links(response)

对于b情况:

#可以使用xpath 获取 指向章节列表的URL,如何url不完整的话可以使用
get_base_url(response) 获取域名信息,然后使用moves.urllib.parse.urljoin()进行拼接
#然后就可以使用Request(),后面的步奏基本上就和a情况一样了
#http://www.ydzww.com

插入数据库这个方面,google一下,使用twisted的数据库接口,好像这个是异步的,配合scrapy估计会更好,要是使用别的也没有关系,我用的django Model 没发现问题

提供一个网上搜出来的代码

# Cannot use this to create the table, must have table already createdfrom twisted.enterprise import adbapi
import datetime
import MySQLdb.cursorsclass SQLStorePipeline(object):def __init__(self):self.dbpool = adbapi.ConnectionPool('MySQLdb', db='mydb',user='myuser', passwd='mypass', cursorclass=MySQLdb.cursors.DictCursor,charset='utf8', use_unicode=True)def process_item(self, item, spider):# run db query in thread poolquery = self.dbpool.runInteraction(self._conditional_insert, item)query.addErrback(self.handle_error)return itemdef _conditional_insert(self, tx, item):# create record if doesn't exist. # all this block run on it's own threadtx.execute("select * from websites where link = %s", (item['link'][0], ))result = tx.fetchone()if result:log.msg("Item already stored in db: %s" % item, level=log.DEBUG)else:tx.execute(\"insert into websites (link, created) ""values (%s, %s)",(item['link'][0],datetime.datetime.now()))log.msg("Item stored in db: %s" % item, level=log.DEBUG)def handle_error(self, e):log.err(e)#该代码片段来自于: http://www.sharejs.com/codes/python/8392
#http://www.ydzww.com

另外就是爬虫控制这块,使用默认的控制,爬虫爬的太快了,有封站的危险,再有就是怕那么快,把采集站爬掉了,以后采集谁的呀?

# 同时下载个数
CONCURRENT_REQUESTS = 5
CONCURRENT_REQUESTS_PER_SPIDER = 5
CLOSESPIDER_PAGECOUNT = 100000
CLOSESPIDER_TIMEOUT = 36000
DOWNLOAD_DELAY = 1.5
RETRY_ENABLED = False
COOKIES_ENABLED = False
# http://www.ydzww.com

这个是我的配置,从我这么多天的采集来看,一分钟采集40个左右的页面,也差不多了

内容的过滤

基本上内容都是用xpath来获取的,然后章节内容也里面还使用了一些正则,去除内容里面的URL,还有一些有关采集站的信息

(http(s)?://.)?(www\.)?[-a-zA-Z0-9@:!$^&\*%.()_\+~#=\uff10-\uff40{}\[\]]{2,256}[\[\]{}!$^\*&@:%._\+~#=()][\[\]{}a-z!$^\*&@:%._\uff10-\uff40\s]{2,6}\b([\[\]-a-zA-Z0-9()@:%_\+.~#?&//=]*)
# www.ydzww.com

这个是我使用来处理内容页url的正则,到目前为止采集小说里面没有碰到处理不了的URL,要是大家能发现有处理不了的话,评论一下,我好做个修改,方便大家使用么!

爬虫比现行的小说爬虫来说,优点有以下几点:

  1. 能在linux下面完美运行,windows下面能运行,但是有时可能出现log文件乱码

  2. 通过和数据库的配置,一本小说对应一个采集站,3分钟循环监控单本小说,保证小说能够在最快的时间采集

  3. 运行快速稳定,scrapy的稳定性还是值得肯定的

已经用这个爬虫程序制作了一个小说站, 易读中文网

转载于:https://www.cnblogs.com/shoufashu/p/4228702.html

使用scrapy制作的小说爬虫相关推荐

  1. java并发小说爬虫,多站点搜索下载,并实现Android客户端开发

    小说爬虫真的很简单,但要能优雅地使用却很麻烦.下面让我来诉说一下这几天的肝路历程.整个流程很完整,但不会很深入,主要是讲思路,给想要写类似功能的同学踩点坑,有什么细节问题直接评论就好. 文章目录 明确 ...

  2. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫...

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,这样很容易被服务器封IP,因此需要设置IP代理,但又不想花钱买,网上有免费IP代理,但大多都数都是不可 ...

  3. python scrapy教程实例_爬虫框架Scrapy的第一个爬虫示例入门教程

    原标题:爬虫框架Scrapy的第一个爬虫示例入门教程 我们使用dmoz.org这个网站来作为小抓抓一展身手的对象. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建 ...

  4. python爬虫框架教程_Python爬虫实战(十二):爬虫框架Scrapy的第一个爬虫示例入门教程...

    本文主要向大家介绍了Python爬虫实战的爬虫框架Scrapy的第一个爬虫示例入门教程,通过具体的内容向大家展现,希望对大家学习Python爬虫实战有所帮助. 我们使用dmoz.org这个网站来作为小 ...

  5. scrapy爬取小说

    文章目录 创建项目 代码实现 效果 创建项目 scrapy startproject book # book 为项目名 文件结构 代码实现 mySpider.py import scrapy from ...

  6. python爬虫图片-如何用Python来制作简单的爬虫,爬取到你想要的图片

    原标题:如何用Python来制作简单的爬虫,爬取到你想要的图片 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我 ...

  7. C#最基本的小说爬虫

    新手学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站. 第一次搞爬虫,涉及到了网络协议,正则表达式,弄得手忙脚乱跑起来效率还差劲,慢慢改吧. 爬的目标:htt ...

  8. python 小说爬虫_Python实现的爬取小说爬虫功能示例

    本文实例讲述了Python实现的爬取小说爬虫功能.分享给大家供大家参考,具体如下: 想把顶点小说网上的一篇持续更新的小说下下来,就写了一个简单的爬虫,可以爬取爬取各个章节的内容,保存到txt文档中,支 ...

  9. 简单 python 小说爬虫 ultimate

    简单 python 小说爬虫 想爬就爬 带txt配置文件 day01(半成品) 划掉 - day02(成品) 书名 史上第一剑修 笔趣阁 url代码里找 ####################### ...

最新文章

  1. 2 拖拽模型_3Dmax插件 | 螺丝钉、挖洞、网格模型等可以分分钟搞定
  2. iOS视频流采集概述(AVCaptureSession)
  3. python如何读取excel的一个sheet_python pandas是如何读取excel表中的sheet的(四)
  4. 项目上线最后工作——布署环境
  5. 数组、字符串长度的计算(转)
  6. Atitit 性能提升总结 流水线模式 FutureTask ForkJoinTask 1.1. 流水线工作方式pipeline 1 1.2. FutureTask模式使用异步 流水线 还有多
  7. 增量式光电编码器原理及其结构
  8. python文件双击闪退_解决python文件双击运行秒退的问题
  9. 决策树模型 朴素贝叶斯模型_有关决策树模型的概述
  10. 推流(RTSP/RTMP)
  11. 解决clion多个mian函数问题
  12. 微信小程序之实现到商品列表跳转商品详情页
  13. 二 蓝牙系统架构 - 2.1 核心系统架构
  14. 数组方法中会更改原数组,不会更改原数组(详细)
  15. 浅谈快件清关与邮关的区别
  16. 英文排版(typography)
  17. android存储文件数据恢复,教程:如何恢复安卓设备内置存储中已删除的文件
  18. HTML+CSS 小米官网案例
  19. 在html中 段落标记p中使用属性,HTML的段落标记中,标注文本以原样显示的是标记 P 答案:错...
  20. 除,除以和被除的区别

热门文章

  1. python编写程序输出诗句_Python文本处理简介:44行代码编写一个简单的隐藏诗生成器,python,入门,藏头诗...
  2. Golang:输出Emoji表情符号
  3. js脚本控制优酷播放器
  4. python中yield语句的作用_Python中关键字yield有什么作用
  5. 勤学如初起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。
  6. 服务器芯片涨价,Q2 合约价再涨 10%、服务器内存大涨 20%:2020 年内存开启涨价模式...
  7. 由一种颜色得到对应的浅色及深色
  8. 【Human-Aware Motion Deblurring】阅读笔记
  9. [论文总结] 深度学习在农业领域应用论文笔记6
  10. IPAD2 开启手势教程、未越狱