此小说爬虫是为了开发易读中文网,
使用scrapy制作的小说爬虫
首先是安装scrapy,在Windows下的安装比较麻烦,大家好好百度下,这里就不细说了,在ubuntu下的安装
1
2
3
4
|
apt-get install python-dev
apt-get install python-lxml
apt-get install libffi-dev
pip install scrapy
|
爬取小说的话无非就是爬取两个页面,小说介绍页和小说章节页,然后又分为2种情况
-
小说介绍页中含有章节列表目录
-
小说介绍页中不含章节列表目录,但是含有指向章节列表的URL
相对于a情况来说:
1
2
3
4
5
6
7
8
|
def parse( self ,response):
# 使用xpath,获取小说名,作者,分类,介绍,章节列表URL #使用下面的方法获取章节列表URL可以直接使用Request(),还能直接获得章节名 #http://www.ydzww.com SgmlLinkExtractor(restrict_xpaths = (config.get( "NovelChapterList_XPATH" ),),).extract_links(response)
|
对于b情况:
1
2
3
4
|
#可以使用xpath 获取 指向章节列表的URL,如何url不完整的话可以使用 get_base_url(response) 获取域名信息,然后使用moves.urllib.parse.urljoin()进行拼接 #然后就可以使用Request(),后面的步奏基本上就和a情况一样了 #http://www.ydzww.com
|
插入数据库这个方面,google一下,使用twisted的数据库接口,好像这个是异步的,配合scrapy估计会更好,要是使用别的也没有关系,我用的django Model 没发现问题
提供一个网上搜出来的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# Cannot use this to create the table, must have table already created from twisted.enterprise import adbapi
import datetime
import MySQLdb.cursors
class 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 pool
query = self .dbpool.runInteraction( self ._conditional_insert, item)
query.addErrback( self .handle_error)
return item
def _conditional_insert( self , tx, item):
# create record if doesn't exist.
# all this block run on it's own thread
tx.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)
|
另外就是爬虫控制这块,使用默认的控制,爬虫爬的太快了,有封站的危险,再有就是怕那么快,把采集站爬掉了,以后采集谁的呀?
1
2
3
4
5
6
7
8
|
# 同时下载个数 CONCURRENT_REQUESTS = 5
CONCURRENT_REQUESTS_PER_SPIDER = 5
CLOSESPIDER_PAGECOUNT = 100000
CLOSESPIDER_TIMEOUT = 36000
DOWNLOAD_DELAY = 1.5 RETRY_ENABLED = False
COOKIES_ENABLED = False
|
这个是我的配置,从我这么多天的采集来看,一分钟采集40个左右的页面,也差不多了
内容的过滤
基本上内容都是用xpath来获取的,然后章节内容也里面还使用了一些正则,去除内容里面的URL,还有一些有关采集站的信息
1
2
3
|
(http(s)?://.)?(www\.)?[-a-zA-Z0-9@:!$^&\*%.()_\+~#=\uff10-\uff40{}\[\]]{2,256}[\[\]{}!$^\*&@:%._\+~#=()][\[\]{}a-z!$^\*&@:%._\uff10-\uff40\s]{2,6}\b([\[\]-a-zA-Z0-9()@:%_\+.~#?&//=]*) # 此正则表达式来自http://www.ydzww.com |
这个是我使用来处理内容页url的正则,到目前为止采集小说里面没有碰到处理不了的URL,要是大家能发现有处理不了的话,评论一下,我好做个修改,方便大家使用么!
爬虫比现行的小说爬虫来说,优点有以下几点:
-
能在linux下面完美运行,windows下面能运行,但是有时可能出现log文件乱码
-
通过和数据库的配置,一本小说对应一个采集站,3分钟循环监控单本小说,保证小说能够在最快的时间采集
-
运行快速稳定,scrapy的稳定性还是值得肯定的
已经用这个爬虫程序制作了一个小说站, 易读中文网
相关推荐
新建项目 (scrapy startproject xxx):新建一个新的爬虫项目 明确目标 (编写items.py):明确你想要抓取的目标 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页 存储内容 (pipelines.py):设计管道存储...
python scrapy 开发企业级分布式爬虫开发架构,使用该架构可快速搭建分布式爬虫环境。 相关技术 使用scrapy_redis进行分布式爬虫操作。 使用mongodb存储数据 开发环境与生产环境的配置分离 自动化部署爬虫脚本,...
本源码提供了一个基于scrapy框架的网络小说爬虫设计。项目包含20个文件,其中包括16个Python脚本文件、1个Gitignore文件、1个LICENSE文件、1个Markdown文档和1个配置文件。这个爬虫可以爬取网络上的小说,供个人阅读...
scrapypython爬虫学习 scrapy框架 爬虫学习python爬虫学习 scrapy框架 爬虫学习python爬虫学习 scrapy框架 爬虫学习python爬虫学习 scrapy框架 爬虫学习 scrapypython爬虫学习 scrapy框架 爬虫学习python爬虫学习 ...
解析Python网络爬虫:核心技术、Scrapy框架、分布式爬虫
本项目是基于Python开发的基于Scrapy和Redis的分布式爬虫...该项目是一个基于Scrapy和Redis的分布式爬虫,用于抓取百度贴吧的数据。项目结构清晰,代码注释详尽,适合用于学习和研究Python在分布式爬虫开发中的应用。
scrapy爬虫 link_spider 图片爬虫 rere_word 生僻字爬虫scrapy爬虫 link_spider 图片爬虫 rere_word 生僻字爬虫scrapy爬虫 link_spider 图片爬虫 rere_word 生僻字爬虫scrapy爬虫 link_spider 图片爬虫 rere_word ...
基于scrapy爬取51job爬虫系统源码.zip 基于scrapy爬取51job爬虫系统源码.zip 基于scrapy爬取51job爬虫系统源码.zip 基于scrapy爬取51job爬虫系统源码.zip 基于scrapy爬取51job爬虫系统源码.zip 基于scrapy爬取51job...
Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 Scrapy吸引人的地方在于它是一个框架,任何人都...
scrapy 是 python 写的爬虫框架,代码架构借鉴于django,灵活多样,功能强大。
程序采用 python 开发的 Scrapy 框架来开发,使用 Xpath 技术对下载的网页进行提取解析,运用 Redis 数据库做分布式, 设计并实现了针对当当图书网的分布式爬虫程序,scrapy-redis是一个基于redis的scrapy组件,...
Python实现基于Scrapy-Redis的分布式爬虫实现框架源码.zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有...
python scrapy 之企业级分布式爬虫开发架构模板
使用了python非常火的Scrapy框架写的爬虫项目,采用Scrapy自带的异步下载,实现对表情包网站的表情秒下载,相比于我上一个发布的表情包爬虫资源,整整快了100倍
用python进行Scrapy框架进行爬虫
该项目是一个基于Scrapy框架的豆瓣图书爬虫,用于爬取豆瓣图书TOP250的图书信息以及这些图书的评论信息。爬虫分为两个部分: 豆瓣图书信息爬虫 (douban_book_spider): 爬取豆瓣图书TOP250的图书的基本信息,并保存...
精通Python爬虫框架Scrapy.pdf
Python 语言实现网络爬虫 Scrapy_轻松定制网络爬虫
一个使用scrapy和redis搭建的分布式爬虫搜索引擎