`
xmy413465057
  • 浏览: 501 次
文章分类
社区版块
存档分类
最新评论

使用scrapy开发的一个小说爬虫

阅读更多

此小说爬虫是为了开发易读中文网,

使用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种情况

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

    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,要是大家能发现有处理不了的话,评论一下,我好做个修改,方便大家使用么!

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

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

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

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

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

 

分享到:
评论

相关推荐

    Python程序设计:Scrapy爬虫框架的使用.pptx

    新建项目 (scrapy startproject xxx):新建一个新的爬虫项目 明确目标 (编写items.py):明确你想要抓取的目标 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页 存储内容 (pipelines.py):设计管道存储...

    基于scrapy框架的网络小说爬虫设计源码

    本源码提供了一个基于scrapy框架的网络小说爬虫设计。项目包含20个文件,其中包括16个Python脚本文件、1个Gitignore文件、1个LICENSE文件、1个Markdown文档和1个配置文件。这个爬虫可以爬取网络上的小说,供个人阅读...

    NovelSouSou小说搜索引擎,使用Scrapy爬取多家笔趣阁网站,使用MongoDB存储小说信息,建立倒排索引以便进行搜索

    这个项目通过集成Scrapy爬虫框架、MongoDB数据库以及Django Web服务,构建了一个高效的小说搜索系统,不仅能够全网抓取小说信息,还能提供一键下载功能,极大地提升了用户找书和阅读的体验。 一、Scrapy爬虫技术 ...

    Scrapy小项目,爬取小说网站所有章节存入mysql,并用django展示出来.zip

    在这个名为"Scrapy小项目,爬取小说网站所有章节存入mysql,并用django展示出来.zip"的压缩包中,我们看到一个使用Python编程语言构建的Web爬虫项目。这个项目结合了三个主要技术:Scrapy(一个强大的爬虫框架)、...

    Scrapy框架爬取爱情诗送给女友项目源码

    Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 Scrapy吸引人的地方在于它是一个框架,任何...

    基于Python的Scrapy框架小说爬取设计源码

    该项目是一个利用Python Scrapy框架开发的小说爬取系统源码,共包含20个文件,其中包括8个Python源代码文件、6个XML配置文件、2个Git忽略文件、2个文本文件、1个Idea项目配置文件和1个配置文件。该系统专注于实现...

    artproject:django结合爬虫scrapy搭建小说网

    在本项目中,我们将探讨如何使用Django框架与Scrapy爬虫库来构建一个小说网站。这个名为"artproject"的项目将展示如何利用Python的强大力量将数据抓取、处理和展示整合到一个完整的Web应用中。下面,我们将详细讲解...

    Java爬虫详细完整源码实例

    在这个“Java爬虫详细完整源码实例”中,我们可以深入理解如何利用Java语言来构建一个功能完备的网络爬虫。下面将详细介绍其中可能涉及的关键知识点。 1. **网络请求库**:在Java爬虫中,我们通常会用到如...

    基于springboot的精品小说网站系统源码带爬虫.zip

    标题中的“基于SpringBoot的精品小说网站系统源码带爬虫”揭示了这是一个使用SpringBoot框架构建的在线小说阅读平台,且集成了网络爬虫功能。这个项目可能旨在为用户提供丰富的在线阅读体验,并能自动抓取互联网上的...

    python-小说网站的爬虫项目

    Python小说网站爬虫项目是一个利用Python编程语言进行网络数据抓取的实践操作,旨在从特定的...通过深入理解上述知识点,并结合项目代码,你将能够创建一个功能完备的小说爬虫,实现自动化抓取和处理网络上的小说资源。

    基于SSM小说阅读网站设计小说爬虫设计毕业源码案例设计.zip

    这是一个基于SSM(Spring、SpringMVC、MyBatis)框架的小说阅读网站设计与小说爬虫技术结合的毕业设计项目。在这个项目中,开发者旨在实现一个完整的在线小说阅读平台,同时利用爬虫技术自动抓取网络上的小说资源,...

    基于SSM小说阅读网站设计小说爬虫设计源码.zip

    本篇文章将深入探讨如何基于Spring、SpringMVC和MyBatis(SSM)框架设计一个小说阅读网站,并实现小说数据的自动抓取,即小说爬虫的设计与实现。 首先,我们需要理解SSM框架的核心组件。Spring是Java企业级应用的...

    基于PHP的葵堆小说php爬虫程序.zip

    9. **Scrapy for PHP**:如果项目规模较大,可以考虑使用Scrapy for PHP框架,它提供了一个更完善的爬虫开发环境。 10. **自动化测试**:编写单元测试,确保爬虫在更新后仍然能正常工作。 总的来说,这个基于PHP的...

    爬虫学习笔记.pdf

    使用Scrapy框架时,用户需要编写一个爬虫类,它负责定义起始URLs,然后Scrapy引擎根据下载器获取的页面内容,通过爬虫处理页面,并将提取的数据交给管道存储。 实际应用中,爬虫可能需要在生成器中使用yield关键字...

    python爬虫,爬小说,存入mysql数据库

    本项目聚焦于使用Python爬虫爬取网络小说,并将抓取到的数据存储到MySQL数据库中,最后通过Django框架创建一个Web应用来展示这些小说信息。 首先,我们要了解Python中的爬虫基础。Python有许多库支持网络爬虫的开发...

    爬虫开发案例详细讲解案例

    ### 爬虫开发案例详细讲解案例 #### 一、爬虫概述 爬虫技术是一项重要的数据抓取技术,主要用于自动化地从互联网上收集信息。爬虫程序通过发送HTTP请求来获取网页的HTML代码,再利用解析技术提取出所需的信息。...

    基于python实现的基于PyQt5和爬虫的小说阅读系统.zip

    本项目是一个结合了Python编程、PyQt5图形用户界面(GUI)库以及网络爬虫技术的实用小说阅读系统。通过该系统,用户可以方便地搜索并阅读网络上的各种小说资源,实现了对网络小说的自动化获取和本地化展示。 首先,...

    Python爬虫和Flask实现小说网站.zip

    在这个项目中,我们将深入探讨如何使用Python进行网络爬虫开发,以及如何利用Flask搭建一个简单的网页应用来展示爬取的小说数据。 首先,Python爬虫是通过编写代码自动抓取网页信息的技术。在Python中,常用的爬虫...

    Python爬取小说网站的小说

    首先,创建一个BeautifulSoup对象,然后通过CSS选择器或标签名找到目标元素。例如,找所有章节链接: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') chapter_...

Global site tag (gtag.js) - Google Analytics