scrapy框架的使用

Scrapy    框架架构

一.Scrapy框架是基于Twisted的异步框架,纯Python实现的爬虫框架,耦合程度低,可拓展性极强。

1.Engine引擎,处理整个系统的数据流、触发事物、框架的核心

2.item项目,定义爬虫爬取结果的数据结构,爬取的数据会被赋值成该item对象

3.Schedule调度器,接受engine发过来的request放入队列,然后engine再次请求时,将request发送给engine

4.Downloader下载器,下载网页内容,并将网页返回给spiders

5.spiders蜘蛛,定义爬取逻辑和网页解析规则,负责解析response提取结果并返回新的request

6.item Pipeline项目管道,负责处理由蜘蛛从网页中抽取项目,进行清洗,验证和存储数据

7.Downloader Middlewares下载器中间件,主要处理engine和Downloader之间的请求及响应

8.spider Middlewares 蜘蛛中间件,主要处理spiders输入的响应和输出结果及新的请求

scrapy数据流

1.engine打开网站,向这个网站的spider请求第一个要爬取的URL

2.engine通过Scheduler以request的形式调度第一个URL

3.engine向Scheduler请求下一个要爬取的URL

4.Scheduler返回下一个要爬取的URL给engine,engine将URL通过Downloader Middlewares 转发给Downloader下载

5.一旦页面下载完毕,Downloader生成该页面的Response,并将其通过Downloader Middlewares发送给Engine

6.Engine从下载器中接受Response,并将其通过Spider Middlewares发送给Spider处理

7.Spider处理Response,并返回爬取到的Item及新的Request给Engine

8.Engine将Spider返回的Item给Item Pipeline,将新的Request给Scheduler

9.重复第2到第8步,直到Scheduler中没有更多的Request,Engine关闭该网站,爬取接受

Scrapy项目认识

1.安装Scrapy通过pip安装   pip install Scrapy

2.创建Scrapy项目,直接通过scrapy命令   scrapy startproject  XXXXX 这个命令可以在任意文件夹运行,我们在一个文件夹中用scrapy startproject Tanzhou命令生成一个Tanzhou的文件夹,再进入Tanzhou文件中,用命令scrapy genspider Tanzhous  shiguangkey.com在文件夹中生成Tanzhous.py文件

3.构造请求

class TanzhousSpider(scrapy.Spider):
    name = ‘Tanzhous‘
    allowed_domains = [‘shiguangkey.com‘]
    baseUrl = ‘https://www.shiguangkey.com/course/list?page=‘
    offset=0

    start_urls = [baseUrl + str(offset)]

4.创建Item,在items.py文件中

import scrapy

class TanzhouItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 课程金额
    money = scrapy.Field()
    # 课程名称
    title = scrapy.Field()
    #课程人数
    personNum=scrapy.Field()

5.解析响应,在Tanzhous.py类的parse()方法中直接对response进行解析,并添加到item中,再返回Item。后面使用了前面offset来构造新的request,使用callback

函数再次解析request

def parse(self, response):
        nodes=response.xpath(‘.//div[@class="course-item w192 h240 fl"]‘)
        for node in nodes:
            item=TanzhouItem()

            item[‘money‘]=node.xpath(‘normalize-space(.//div[@class="item-line"]/span/text())‘).extract_first()
            item[‘title‘]=node.xpath(‘normalize-space(.//div[@class="itemcont"]/a/text())‘).extract_first()
            item[‘personNum‘]=node.xpath(‘.//div[@class="item-line"]/a/text()‘).extract_first()

            yield item

            if self.offset <24:
               self.offset += 1
               url = self.baseUrl + str(self.offset)
               yield scrapy.Request(url, callback=self.parse)

6.进入目录运行项目使用命令  scrapy crawl Tanzhous,可以运行结果,

这只是一部分内容,通过Scrapy框架可以做到边解析边爬取,直到爬取结束,停止

7.可以将命令窗口爬取到的内容保存到文件,执行下面的命令保存成json文件  scrapy crawl Tanzhous -o Tanzhous.json运行之后就可以看见json文件了

还可以通过命令输出csv、xml、pickle、marshal格式

scrapy crawl Tanzhous -o Tanzhous.csv

scrapy crawl Tanzhous -o Tanzhous.xml

scrapy crawl Tanzhous -o Tanzhous.pickle

scrapy crawl Tanzhous -o Tanzhous.marshal

8.将结果保存到MongoDB数据库要通过定义Item Pipeline实现,修改pipeline.py文件添加新类TextPipeline 实现process_item()方法,ItemPipeline是项目管道,前面生成的Item都要被送到ItemPipeline进行处理,也就是清理Html数据,验证爬虫数据,查重,再保存到数据库中

import pymongo
from scrapy.exceptions import DropItem

class TextPipeline(object):

    def __init__(self):
        self.limit=50
    def process_item(self, item, spider):
        if item[‘title‘]:
           if len(item[‘title‘])>self.limit:
              item[‘title‘]=item[‘title‘][0:self.limit].rstrip()+‘...‘
           return item
        else:
           return DropItem(‘Missing Text‘)

这是对数据的再处理以便保存到数据库。同样在pipeline.py中定义另一个Pipeline,我们实现另一个MongoPipeline如下

class MongoPipeline(object):

     def __init__(self, mongo_uri,mongo_db):
         self.mongo_uri=mongo_uri
         self.mongo_db=mongo_db

     @classmethod
     def from_crawler(cls,crawler):
         return cls(
            mongo_uri=crawler.settings.get(‘MONGO_URI‘),
            mongo_db=crawler.settings.get(‘MONGO_DB‘)
        )
     def open_spider(self,spider):
        self.client=pymongo.MongoClient(self.mongo_uri)
        self.db=self.client[self.mongo_db]

     def process_item(self,item,spider):
        name=item.__class__.__name__
        self.db[name].insert(dict(item))
        return item
     def close_spider(self,spider):
        self.client.close()

我们还要在setting.py中配置内容

ITEM_PIPELINES={
    ‘Tanzhou.pipelines.TextPipeline‘:300,
    ‘Tanzhou.pipelines.MongoPipeline‘:400,
}
MONGO_URI=‘localhost‘
MONGO_DB=‘TanzhouW‘

还要启动mongodb数据库,在执行爬取运行命令 scrapy crawl Tanzhous 爬取结束后MongoDB中创建了一个数据库如下

原文地址:https://www.cnblogs.com/jzxs/p/10158666.html

时间: 2024-07-30 15:58:04

scrapy框架的使用的相关文章

Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解

这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider/tree/master/jobboleSpider 注:这个文章并不会对详细的用法进行讲解,是为了让对scrapy各个功能有个了解,建立整体的印象. 在学习Scrapy框架之前,我们先通过一个实际的爬虫例子来理解,后面我们会对每个功能进行详细的理解.这里的例子是爬取http://blog.jobb

windows下scrapy框架学习笔记—&#39;scrapy&#39; 不是内部或外部命令

最近几天在深入的学习scrapy框架,但是装完各种需要的基础包之后却发现scrapy命令在别的路径下都用不了,我一开始是把python安装在F:\Python路径下的,安装了scrapy后它默认都会安装在这个路径下,scrapy在路径F:\Python\Scripts路径下,我的scrapy命令只能在此路径下用,因此创建什么工程也都只能在此文件下. 想了一下它的工作原理:它在F:\Python\Scripts路径下,就会在Scripts文件下存在一个scrapy批处理文件,那么在DOS下想要命令

Python爬虫进阶三之Scrapy框架安装配置

初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 Win7,首先,你要有Python,我用的是2.7.7版本,Python3相仿,只是一些源文件不同. 官网文档:http://doc.scrapy.org/en/latest/intro/install.html,最权威哒,下面是我的亲身体验过程. 1.安装Python 安装过程我就不多说啦,我的电

scrapy框架设置代理

网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解决此问题在scrapy中使用代理,有两种使用方式 1.使用中间件2.直接设置Request类的meta参数 下面依次简要说明下如何使用 方式一:使用中间件要进行下面两步操作 在文件 settings.py 中激活代理中间件ProxyMiddleware在文件 middlewares.py 中实现类P

python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

操作环境:python3 在上一文中python爬虫scrapy框架--人工识别登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前的文章便于理解 本文将介绍如何用scrapy来登录知乎. 不多说,直接上代码: import scrapy import re import json class ZhihuSpider(scrapy.Spider): name = 'zhihu' allowed_domains = ['www.zhi

[Python][Scrapy 框架] Python3 Scrapy的安装

1.方法(只介绍 pip 方式安装) PS.不清楚 pip(easy_install) 可以百度或留言. cmd命令: (直接可以 pip,而不用跳转到 pip.exe目录下,是因为把所在目录加入 Path 环境变量中) 通过 pip install 安装的好处: 安装起来非常的方便 安装 scrapy 和依赖包 包的一致性可以保证 2.可能遇到的一些问题 安装到的时候有些自动装不上: 上图显示装 'twisted.test.raiser' 这个子扩展包的时候自动装不上去,因为需要 VC++ 1

使用scrapy框架---爬小说,入库

本人步骤: 1>setting.py: BOT_NAME = 'newding' SPIDER_MODULES = ['newding.spiders']NEWSPIDER_MODULE = 'newding.spiders' ROBOTSTXT_OBEY = True ITEM_PIPELINES = { 'newding.pipelines.NewdingPipeline': 300,} 以上配置:创建项目会自动出现这些 以下是想要入数据库的(阶段): MYSQL_USER = 'root'

第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

第三百三十四节,web爬虫讲解2-Scrapy框架爬虫-Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻标题和rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是 js 的 Ajax 动态请求生成的信息 我们以百度新闻为列: 1.分析网站 首先我们浏览器打开百度新闻,在网页中间部分找一条新闻信息 然后查看源码,看看在源码里是否有

Python爬虫Scrapy框架入门(2)

本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写xpath表达式,获取信息.自动爬取策略是,找到翻页网页元素,获取新链接地址,执行翻页.网页分析部分不再赘述,原博讲的很好很清楚,很涨姿势 基于拿来主义,我们只需要知道怎么更改Scrapy框架就行了~ items.py: import scrapy class TestprojItem(scrapy

python爬虫----(2. scrapy框架)

Scrapy框架,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 刚开始学习这个框架.不太好评论.只是感觉这个框架有些Java的感觉,需要太多的其他模块的支持. (一)创建 scrapy 项目 # 使用 scrapy startproject scrapy_test ├── scrapy_test │   ├── scrapy.cfg │   └── scrapy_test │