Scrapy初探一2020-08-20

Scrapy介绍

  • 什么是Scrapy
    Scrapy是一个为了爬取数据网站,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速的抓取。

Scrapy使用了Twisted异步网络框架,可以加快我们的爬取速度
http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html

  • 异步和非阻塞的区别


    image.png

异步:调用在发出之后,这个调用就直接返回,不管有无结果

非阻塞:关注的是程序在等待调用结果时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程。

Scrapy工作流程

image.png

另一种爬虫方式

image.png

Scrapy工作流程

image.png

image.png

Scrapy入门

1.创建一个Scrapy项目
Scrapy startproject 项目名

2.生成一个爬虫
Scrapy genspider 爬虫名 "域名(example.com/cn)"

3.提取数据
完善spider 提取xpath等

4.保存数据
pipline中保存数据

在命令行中运行爬虫

Scrapy crawl qb  # 爬虫的名字

在pycharm中运行爬虫

from scrapy import cmdline

cmdline.execute("scrapy crawl qb".split())
或者
cmdline.execute("scrapy","crawl","pb")

注意:

  • pipeline上面有一条注释语句(Don't forget to add your pipeline to the ITEM_PIPELINES setting)不要忘记在settings中操作
  • settings中不要忘记添加在DEFAULT_REQUEST_HEADERS添加UA
  • spiders中返回数据时要用yield不要用return,return默认返回一条数据,scrapy速度很快
  • LOG_LEVEL = 'WARNING'提高日志等级,取出一些不需要的东西
  • 在Scrapy当中 get() extract_first() <div>这个是一个数据</div>
    get()就是获取带有标签的数据 ---> <div>这个是一个数据</div>
    extract_first() 得到文本的数据 --> 这个是一个数据

pipeline使用

从pipeline的字典形可以看出来,pipeline可以有多个
为什么需要多个pipeline

  • 可能有多个spider,不同的pipeline处理不同的item内容
  • 一个spider内容可以做不同的操作,不如存入不同的数据库
class SpiderPipeline1:
    def process_item(self, item, spider):
        if spider.name == 'taobao':
            # print(item)
            return item
# 方法中的spider参数,可通过spider.name的方式获取爬虫名字,然后不同的管道处理不同的爬虫
ITEM_PIPELINES = {
   'spider.pipelines.SpiderPipeline': 300,
   'spider.pipelines.SpiderPipeline1': 301
}
# settings中要设置两个爬虫

注意:

  • pipeline的权重越小,优先级越高
  • pipeline中process_item方法名不能修改为其它名称
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容