• day103-scrapy-scrapy 介绍、 scrapy安装、创建运行、目录介绍、settings介绍、爬取抽屉新闻、scrapy的数据解析(重点)、scrapy的持久化存储(重点)


    昨日回顾

    # 1 路径解析出来,发请求如果禁止了,请求头里都试一下,如果还不行,就是cookie带的不对,可以先请求一下之前的页面,拿到cookie,继续操作
    # 2 selenium模块(直接操作浏览器)
    	1 安装模块,配套一个驱动(版本一定对应)
        2 bro对象贯穿始终
        3 bro.page_source(bs4,lxml)
        4 内置的:find_element_by...   find_elements_by css选择,xpath选择
        5 标签的属性:get_attribute('属性名').text   .size .location  ,获取cookie:get_cookies()
        6 执行js,打开标签,往下滑动
        7 前进后退,标签的切换
        8 动作链:鼠标点中,滑动某些标签
        9 隐士等待,按键
        
    # 3 爬取京东商品信息
    # 4 自动登录12306
    # 5 cookie池的搭建
    

    今日内容

    1 scrapy 介绍,架构介绍(框架)

    #1  通用的网络爬虫框架,爬虫界的django
    #2 scrapy执行流程
    	5大组件
        	-引擎(EGINE):大总管,负责控制数据的流向
            -调度器(SCHEDULER):由它来决定下一个要抓取的网址是什么,去重
            -下载器(DOWLOADER):用于下载网页内容, 并将网页内
            容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的
            -爬虫(SPIDERS):开发人员自定义的类,用来解析responses,并且提取items,或者发送新的请求request
            -项目管道(ITEM PIPLINES):在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作
    	2大中间件
        	-爬虫中间件:位于EGINE和SPIDERS之间,主要工作是处理SPIDERS的输入和输出(用的很少)
            -下载中间件:引擎和下载器之间,加代理,加头,集成selenium        
            
    # 3 开发者只需要在固定的位置写固定的代码即可(写的最多的spider)
    

    2 scrapy安装(windows,mac,linux)

    #1 pip3 install scrapy(mac,linux)
    #2 windows上(80%能成功,少部分人成功不了)
    	1、pip3 install wheel #安装后,便支持通过wheel文件安装软件,wheel文件官网:https://www.lfd.uci.edu/~gohlke/pythonlibs
        3、pip3 install lxml
        4、pip3 install pyopenssl
        5、下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/
        6、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
        7、执行pip3 install 下载目录Twisted-17.9.0-cp36-cp36m-win_amd64.whl
        8、pip3 install scrapy
    # 3 就有scrapy命令
    	-D:Python36Scriptsscrapy.exe  用于创建项目
    

    3 scrapy 创建项目,创建爬虫,运行爬虫

    1 scrapy startproject 项目名
    	-scrapy startproject firstscrapy
    2 创建爬虫
    	-scrapy genspider 爬虫名 爬虫地址
        -scrapy genspider chouti dig.chouti.com
        -一执行就会在spider文件夹下创建出一个py文件,名字叫chouti
    3 运行爬虫
    	-scrapy crawl chouti   # 带运行日志
        -scrapy crawl chouti --nolog  # 不带日志
    4 支持右键执行爬虫
    	-在项目路径下新建一个main.py
        from scrapy.cmdline import execute
    	execute(['scrapy','crawl','chouti','--nolog'])
    

    4 目录介绍

    
        # 目录介绍
        firstscrapy  # 项目名字
            firstscrapy # 包
                -spiders # 所有的爬虫文件放在里面
                    -baidu.py # 一个个的爬虫(以后基本上都在这写东西)
                    -chouti.py
                -middlewares.py # 中间件(爬虫,下载中间件都写在这)
                -pipelines.py   # 持久化相关写在这(items.py中类的对象)
                -main.py        # 自己加的,执行爬虫
                -items.py       # 一个一个的类,
                -settings.py    # 配置文件
            scrapy.cfg          # 上线相关
    

    5 settings介绍

    1 默认情况,scrapy会去遵循爬虫协议
    2 修改配置文件参数,强行爬取,不遵循协议
    	-ROBOTSTXT_OBEY = False
    3 USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
    4 LOG_LEVEL='ERROR'
    

    6 爬取抽屉新闻

    # 详见代码
    

    7 scrapy的数据解析(重点)

    
    #xpath:
        -response.xpath('//a[contains(@class,"link-title")]/text()').extract()  # 取文本
        -response.xpath('//a[contains(@class,"link-title")]/@href').extract()  #取属性
    #css
        -response.css('.link-title::text').extract()  # 取文本
        -response.css('.link-title::attr(href)').extract_first()  # 取属性
    
    

    8 scrapy的持久化存储(重点)

    #1 方案一:parser函数必须返回列表套字典的形式(了解)
    	scrapy crawl chouti -o chouti.csv
    #2 方案二:高级,pipline item存储(mysql,redis,文件)
    	-在Items.py中写一个类
        -在spinder中导入,实例化,把数据放进去
        	    item['title']=title
                item['url']=url
                item['photo_url']=photo_url
                yield item
                
        -在setting中配置(数字越小,级别越高)
        	ITEM_PIPELINES = {
       		'firstscrapy.pipelines.ChoutiFilePipeline': 300,
    		}
        -在pipelines.py中写ChoutiFilePipeline
        	-open_spider(开始的时候)
            -close_spider(结束的时候)
            -process_item(在这持久化)
    

    补充

    https://www.cnblogs.com/PythonLearner/p/13424051.html
        
    https://juejin.im/post/6857287743966281736
    

    作业:

    1 新建scrapy项目,爬取抽屉数据,存到redis和mysql中
    2 读http协议文章并整理https://juejin.im/post/6857287743966281736
    3 爬取cnblogs首页文章,打印出标题和连接地址
    4 (部分)爬取cnblogs文章,把标题连接地址和文章内容保存到mysql,连续爬取n页
    5 (部分)登录到抽屉获取cookie,使用requests给文章点赞
    
  • 相关阅读:
    【C++FAQ】如何设定小数点后的显示位数
    【C++FAQ】怎么输入一行字符串(可能带空格)
    c++ operator重载的例子
    【C++FAQ】怎么给结构体排序
    【IT面试题007】英语字符串的分词程序
    【C++/C FAQ】如何格式化输出以0填充的定长整数
    nginx的root和alias指令的区别
    linux磁盘满了,各种奇怪错误
    使用nginx搭建http代理服务器
    nginx图片过滤处理模块http_image_filter_module安装配置笔记
  • 原文地址:https://www.cnblogs.com/zdw20191029/p/14553265.html
Copyright © 2020-2023  润新知