【Scrapy】框架

安装scrapy
    选择安装位置:cd D:\work\Python\python_interpreter\pythonProject\Scripts
    安装:pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple/

1.创建爬虫的项目
    选择创建位置:cd D:\work\Python\pythonProject\Crawler
    创建:scrapy startproject 项目的名宁
    注意:项目的名字不允许使用数字开头也不能包含中文

2.创建爬虫文件
    要在spiders文件夹中去创建爬虫文件:
    cd 项目的名字\项目的名字\spiders
    cd scrapy_baidu_25\scrapy_baidu_25\spiders

    创建爬虫文件:
    scrapy genspider 爬虫文件的名字 要爬取的网页
    eg: scrapy genspider baidu www.baidu.com
    注意:一般情况下不需要添加http协议,
         因为start_urls的值是根据allowed_domains修改的,
         所以添加了http的话,
         那么start_urls就需要我们手动去修改了

3. 运行爬虫代码
    注释掉settings.py中的君子协议  # ROBOTSTXT_OBEY = True
    scrapy crawl 爬虫的名字
    eg: scrapy crawl baidu

4. scrapy项目的结构
    项目名字
        项目名字
            spiders文件夹(存储的是爬虫文件)
                init
                自定义的爬虫文件  核心功能文件
            init
            items       定义数据结构的地方  爬取的数据都包含哪些
            middleware  中间件  代理
            pipelines   管道  用来处理下载的数据
            settings    配置文件  robots协议  ua定义等

5. response的属性和方法
    response.text               获取的是响应的字符串
    response.body               获取的是二进制数据
    response.xpath              可以直接是xpath方法来解析response中的内容
    response.extract()          提取seletor对象的data属性值
    response.extract_first()    提取的seletor列表的第一个数据

6. scrapy架构组成
    (1)引擎  ---》自动运行,无需关注,会自动组织所有的请求对象,分发给下载器
    (2)下载器  ---》从引擎处获取到请求对象后,请求数据
    (3) spiders  ---》spider类定义了如何爬取某个(或某些)网站。
                      包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。
                      换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。
    (4)调度器  ---》有自己的调度规则,无需关注
    (5)管道(Item pipeline)  ---》最终处理数据的管道,会预留接口供我们处理数据当Iten在spider中被收集之后,
                                它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。
                                每个item pipeline组件(有时称之为"Item Pipeline")是实现了简单方法的Python类。
                                他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。
                                以下是item pipeline的一些典型应用:
                                    1.清理HTML数据
                                    2.验证爬取的数据(检查item包含某些字段)3.查重(并丢弃)
                                    4.将爬取结果保存到数据库中

7. 调试(scrapy shell)
进入到scrapy shell的终端,直接在window的终端中输入“scrapy shell 域名”
如果想看到一些高亮或者自动补全那么可以安装ipython pip install ipython

8. CrawlSpider
    (1)继承自scrapy.spider
    (2)独门秘笈
        crawlSpider可以定义规则,再解析html内容的时候,可以根据链接规则提取出指定的链接,然后再向这些链接发送请求。
        所以,如果自需要跟进链接的需求,意思就是爬取了网页之后,需要提取链接再次爬耿,使用CrawlSpider是非常合适的。
    (3)提取链接
        链接提取器,在这里就可以写规则提取指定链接
        scrapy.linkextractors.LihkExtractor(
        allow = (),             # 正则表达式提取符合正则的链接 **
        deny = (),              #〔不用)正则表达式不提取符合正则的链接
        allow_domains = (),     # (不用)允许的域名
        deny_domains = (),      # (不用)不允许的域名
        rcstrict_xpaths = (),   # xpath,提取符合xpath规则的链接 *
        restrict_css = ()       # 提取符合选择器规则的链接 *
        )
    (4)模拟使用
        正则用法: links1 = LinkExtractor(allow=r'list_23_\d+\.html')
        xpath用法: links2 = LinkExtractor(restrict_xpaths=r'//div[@class="x"]')
        css用法: links3 = LinkExtractor(restrict_css='.x')
    (5)提取连接
        link.extract_links(response)
    (6)注意事项
        【注1】callback只能写函数名字符串,callback='parse_item'
        【注2】在基本的spider中,如果重新发送请求,那里的callback写的是 callback=self.parse_ilem
        【注-稍后看】follow=true是否跟进就是按照提取连接规则进行提取
    (7)案例
        1.创建项目:scrapy startproject 项目的名宁
        2.跳转到spiders路径
        3.创建爬虫类: scrapy genspider -t crawl 爬虫文件的名字 要爬取的网页
        4.items
        5.spiders
        6.settings
        7.pipelines
            数据保存到本地
            数据保存到mysql数据库

9. 日志信息和日志等级
    (1)日志级别:
        CRITICAL:   严重错误
        ERROR:      一般错误
        WARNING:    警告
        INFO:       一般信息
        DEBUG:      调试信息

        默认的日志等级是DEBUG,
        只要出现了DEBUG或者DEBUG以上等级的日志,那么这些日志将会打印
    (2)settings.py文件设置:
        默认的级别为DEBUG,会显示上面所有的信息
        在配置文件中  settings.py
        LOG_FILE  :将屏幕显示的信息全部记录到文件中,屏幕不再显示,注意文件后缀一定是.log
        LOG_LEVEL :设置日志显示的等级,就是显示哪些,不显示哪些

10. scrapy的post请求
    (1)重写start_requests方法:
        def start_requests(self)
    (2)start_requests的返回值:
        scrapy.FormRequesL(url=url, headers=headers, callback=self.parse_item, formdata=data)
            url:        要发送的post地址
            headers:    可以定制头信息
            callback:   回调函数
            formdata:   post所携带的数据,这是一个字典

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值