Scrapy_1-基本运行使用

快速入门

应掌握的四个能力
1、能够创建scrapy项目、编写个简单的蜘蛛并运行蜘蛛;
2、能够简单的使用scrapy shell 调试数据;
3、能够使用scrapy css选择器提取简单数据;
4、除了能够提取一页数据,还要能提取下一页、在下一页。

创建一个scrapy项目

在开始爬取之前,我们首先要创建一个scrapy项目,在命令行输入一下命令即可创建。

scrapy startproject mingyan  #mingyan是我们创建的蜘蛛名字,后面我们运行的时候用得到。

之后便可在pycharm中打开。

编写第一个scrapy蜘蛛
  1. 在spiders目录下面,这一个scrapy 文档,我们就来创造一只scrapy蜘蛛。
    在这里插入图片描述上面我们已经创建了一个mingyan_spider.py 的文件,那里面到底该写神马呢?当然我们需要遵守scrapy的规则,那一个蜘蛛到底需要神马规则呢?
    A:首先我们需要创建一个类,并继承scrapy的一个子类:scrapy.Spider 或者是其他蜘蛛类型,后面会说到,除了Spider还有很多牛X的蜘蛛类型;

B:然后定义一个蜘蛛名,name=“” 后面我们运行的话需要用到;

C:定义我们需要爬取的网址,没有网址蜘蛛肿么爬,所以这是必须滴;

D:继承scrapy的一个方法:start_requests(self),这个方法的作用就是通过上面定义的链接去爬取页面,简单理解就是下载页面。

我们先来看看第一个简单的蜘蛛项目:

import scrapy

class mingyan(scrapy.Spider): #需要继承scrapy.Spider类
    
name = "mingyan2" # 定义蜘蛛名

    def start_requests(self): # 由此方法通过下面链接爬取页面
        
        # 定义爬取的链接
        urls = [
            'http://lab.scrapyd.cn/page/1/',
            'http://lab.scrapyd.cn/page/2/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse) #爬取到的页面如何处理?提交给parse方法处理

    def parse(self, response):

        '''
        start_requests已经爬取到页面,那如何提取我们想要的内容呢?那就可以在这个方法里面定义。
        这里的话,并木有定义,只是简单的把页面做了一个保存,并没有涉及提取我们想要的数据,后面会慢慢说到
        也就是用xpath、正则、或是css进行相应提取,这个例子就是让你看看scrapy运行的流程:
        1、定义链接;
        2、通过链接爬取(下载)页面;
        3、定义规则,然后提取数据;
        就是这么个流程,似不似很简单呀?
        '''


        page = response.url.split("/")[-2]     #根据上面的链接提取分页,如:/page/1/,提取到的就是:1
        filename = 'mingyan-%s.html' % page    #拼接文件名,如果是第一页,最终文件名便是:mingyan-1.html
        with open(filename, 'wb') as f:        #python文件操作,不多说了;
            f.write(response.body)             #刚才下载的页面去哪里了?response.body就代表了刚才下载的页面!
        self.log('保存文件: %s' % filename)      # 打个日志
运行蜘蛛

在scrapy所在主目录下执行

scrapy crawl  mingyan2

详细教程参见http://www.scrapyd.cn/doc/144.html

scrapy调试工具:scrapy shell使用方法

scrapy提取数据的方式有:CSS、XPATH、RE(正则)

scrapy调试工具

scrapy shell http://lab.scrapyd.cn  #要爬取的网页。

你看,我刚已输入:scrapy shell http://lab.scrapyd.cn命令行立马就显示为

2017-12-15 09:48:38 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2017-12-15 09:48:38 [scrapy.extensions.telnet] DEBUG: Telnet console listening o
n 127.0.0.1:6023
2017-12-15 09:48:38 [scrapy.core.engine] INFO: Spider opened
2017-12-15 09:48:38 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://lab.sc
rapyd.cn> (referer: None)
2017-12-15 09:48:39 [traitlets] DEBUG: Using default logger
2017-12-15 09:48:39 [traitlets] DEBUG: Using default logger
[s] Available Scrapy objects:
[s]   scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s]   crawler    <scrapy.crawler.Crawler object at 0x0000000004ED2940>
[s]   item       {}
[s]   request    <GET http://lab.scrapyd.cn>
[s]   response   <200 http://lab.scrapyd.cn>
[s]   settings   <scrapy.settings.Settings object at 0x0000000004FF8F98>
[s]   spider     <DefaultSpider 'default' at 0x525afd0>
[s] Useful shortcuts:
[s]   fetch(url[, redirect=True]) Fetch URL and update local objects (by default
, redirects are followed)
[s]   fetch(req)                  Fetch a scrapy.Request and update local object
s
[s]   shelp()           Shell help (print this help)
[s]   view(response)    View response in a browser
In [1]:

比如我们想提取 http://lab.scrapyd.cn 的 title,我们可以在 In[1]: 后面输入:response.css(‘title’) ,然后回车, 立马就得到如下结果:

>>> response.css('title')

[<Selector xpath='descendant-or-self::title' data='<title>爬虫实验室 - S
CRAPY中文网提供</title>'>]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值