• Scrapy的基本介绍、安装及工作流程


    一.Scrapy介绍

    Scrapy是什么?

    Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架(异步爬虫框架) 通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。 Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度

    • 异步和非阻塞的区别

    1.png

    异步:调用在发出之后,这个调用就直接返回,不管有无结果 非阻塞:关注的是程序在等待调用结果时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程

    Scrapy的优势

    爬虫必备的技术 - 能够使我们的爬虫程序更加稳定 效率更高(多线程) - 配置和可扩展性非常强(很灵活) - downloader 下载器(基于多线程的) 发送请求 获取响应的

    Scrapy的安装

    pip install scrapy==2.5.1 -i Simple Index

    Scrapy工作流程

    一种爬虫方式

    另一种爬虫方式

    工作流程

    各个组件的功能介绍

    Scrapy engine(引擎)总指挥:负责数据和信号的在不同模块间的传递scrapy已经实现
    Scheduler(调度器)一个队列,存放引擎发过来的request请求scrapy已经实现
    Downloader(下载器)下载把引擎发过来的requests请求,并返回给引擎scrapy已经实现
    Spider(爬虫)处理引擎发来的response,提取数据,提取url,并交给引擎需要手写
    Item Pipline(管道)处理引擎传过来的数据,比如存储需要手写
    Downloader Middlewares(下载中间件)可以自定义的下载扩展,比如设置代理一般不用手写
    Spider Middlewares(中间件)可以自定义requests请求和进行response过滤一般不用手写
    1 引擎(engine)   scrapy已经实现
    scrapy的核心, 所有模块的衔接, 数据流程梳理
    ​
    2 调度器(scheduler)   scrapy已经实现
    本质上这东西可以看成是一个队列,里面存放着一堆我们即将要发送的请求,可以看成是一个url的容器
    它决定了下一步要去爬取哪一个url,通常我们在这里可以对url进行去重操作。
    ​
    3 下载器(downloader)  scrapy已经实现
    它的本质就是用来发动请求的一个模块,小白们完全可以把它理解成是一个requests.get()的功能,
    只不过这货返回的是一个response对象.
    ​
    4 爬虫(spider)  需要手写 
    这是我们要写的第一个部分的内容, 负责解析下载器返回的response对象,从中提取到我们需要的数据
    ​
    5 管道(Item pipeline)
    这是我们要写的第二个部分的内容, 主要负责数据的存储和各种持久化操作
    ​
    6  下载中间件(downloader Middlewares)  一般不用手写
    可以自定义的下载扩展 比如设置代理 处理引擎与下载器之间的请求与响应(用的比较多)
    ​
    7  爬虫中间件(Spider Middlewares)  一般不用手写
    可以自定义requests请求和进行response过滤(处理爬虫程序的响应和输出结果以及新的请求)

    Scrapy入门与总结

    Scrapy入门

    前提:路径切换 cd  copy path  复制绝对路径 
    
    1. 1. 创建scrapy项目
    2. scrapy startproject mySpider
    3. scrapy startproject(固定的)
    4. mySpider(不固定的 需要创建的项目的名字)
    5. 2. 进入项目里面:cd mySpider
    6. 3. 创建爬虫程序
    7. scrapy genspider example example.com
    8. scrapy genspider:固定的
    9. example:爬虫程序的名字(不固定的)
    10. example.com:可以允许爬取的范围(不固定的) 是根据你的目标url来指定的 其实很重要 后面是可以修改的
    11. 目标url:https://www.baidu.com/
    12. scrapy genspider bd baidu.com
    13. 4. 执行爬虫程序
    14. scrapy crawl bd
    15. scrapy crawl:固定的
    16. db:执行的爬虫程序的名字
    17. 可以通过start.py文件执行爬虫项目:
    18. from scrapy import cmdline
    19. cmdline.execute("scrapy crawl bd".split())

    Scrapy文件说明

    1. baidu.py爬虫文件
    2.    # 爬虫程序的名字
    3.    name = 'bd'
    4.    # 可以爬取的范围
    5.    # 有可能我们在实际进行爬取的时候 第一页可能是xxx.com 第三页可能就变成了xxx.cn
    6.    # 或者xxx.yy 那么可能就会爬取不到数据
    7.    # 所以我们需要对allowed_domains进行一个列表的添加
    8.    allowed_domains = ['baidu.com']
    9.    # 起始url地址 会根据我们的allowed_domains对网页前缀进行一定的补全
    10.    # 但有时候补全的url不对 所以我们也要去对他进行修改
    11.    start_urls = ['https://www.baidu.com/']
    12.    # 专门用于解析数据的
    13.    def parse(self, response):  
    14.        
    15. items.py 数据封装的
    16. middlewares.py 中间件(爬虫中间件和下载中间件)
    17. pipelines.py 管道(保存数据的)
    18. settings.py Scrapy的配置项
    19. # 1 自动生成的配置,无需关注,不用修改
    20. BOT_NAME = 'mySpider'
    21. SPIDER_MODULES = ['mySpider.spiders']
    22. NEWSPIDER_MODULE = 'mySpider.spiders'
    23. # 2 取消日志
    24. LOG_LEVEL = 'WARNING'
    25. # 3 设置UA,但不常用,一般都是在MiddleWare中添加
    26. USER_AGENT = 'mySpider (+http://www.yourdomain.com)'
    27. # 4 遵循robots.txt中的爬虫规则,很多人喜欢False,当然我也喜欢....
    28. ROBOTSTXT_OBEY = True
    29. # 5 对网站并发请求总数,默认16
    30. CONCURRENT_REQUESTS = 32
    31. # 6 相同网站两个请求之间的间隔时间,默认是0s。相当于time.sleep()
    32. DOWNLOAD_DELAY = 3
    33. # 7 禁用cookie,默认是True,启用
    34. COOKIES_ENABLED = False
    35. # 8 默认的请求头设置
    36. DEFAULT_REQUEST_HEADERS = {
    37.  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    38.  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    39.  'Accept-Language': 'en',
    40. }
    41. # 9 配置启用爬虫中间件,Key是class,Value是优先级
    42. SPIDER_MIDDLEWARES = {
    43.   'mySpider.middlewares.MyspiderSpiderMiddleware': 543,
    44. }
    45. # 10 配置启用Downloader MiddleWares下载中间件
    46. DOWNLOADER_MIDDLEWARES = {
    47.   'mySpider.middlewares.MyspiderDownloaderMiddleware': 543,
    48. }
    49. # 11 开启管道 配置启用Pipeline用来持久化数据
    50. ITEM_PIPELINES = {
    51.   'mySpider.pipelines.MyspiderPipeline': 300,
    52. }

    settings配置项更多参考: https://www.cnblogs.com/seven0007/p/scrapy_setting.html

    Scrapy总结

    scrapy其实就是把我们平时写的爬虫进行了四分五裂式的改造. 对每个功能进行了单独的封装, 并且, 各个模块之间互相的不做依赖. 一切都由引擎进行调配. 这种思想希望你能知道–解耦. 让模块与模块之间的关联性更加的松散. 这样我们如果希望替换某一模块的时候会非常的容易. 对其他模块也不会产生任何的影响。

  • 相关阅读:
    leetcode298周赛记录
    R语言使用HTTP爬虫IP写一个程序
    初识C语言:掌握未来的编程利器
    OpenCV实战(31)——基于级联Haar特征的目标检测
    Linux 遍历目录(cd 命令)
    一文详解什么是软件部署
    东软始业教育结业考试
    策略即代码如何帮助防止云配置错误
    树莓派学习
    高电压技术-冲击高压发生器MATLAB仿真
  • 原文地址:https://blog.csdn.net/weixin_73320743/article/details/132730560