• scrapy


    问题
    1.空气参数问题
    2.代理速度慢
    3.截图问题
    分辨率
    selenium
    动作链
    浏览器托管
    规避检测
    无头浏览器
    phantomJS
    谷歌无头
    pyppteer
    appnium:
    基于手机app的自动化的模块
    和爬虫之间的关联
    模拟登陆
    便捷的捕获到动态加载的数据
    js解密
    js混淆
    对js核心代码进行加密
    js逆向
    将js代码转换成python代码
    手动逆向
    自动逆向:
    PyExcelJS
    scrapy框架

    • 框架:就是一个具有很强的通用性且封装一些通用实现方法(功能)的一个项目模板。
    • scrapy(异步):
    • 高性能的网络请求
    • 数据解析
    • 持久化存储
    • 全站数据爬取
    • 深度爬取
    • 分布式
    • 环境的安装
      a. pip3 install wheel

    b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

    c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl

    d. pip3 install pywin32

    e. pip3 install scrapy

    • scrapy的基本使用
    • 创建一个工程
    • scrapy startproject proName
    • cd proName
    • 创建一个爬虫文件(py源文件)
    • scrapy genspider spiderName www.xxx.com
    • 基本的配置:settings.py
    • UA伪装
    • robots协议的不遵从
    • 指定日志等级
    • LOG_LEVEL = ‘ERROR’
    • 执行工程
    • scrapy crawl spiderName
    • 数据解析
    • response.xpath(‘xpath表达式’)
    • 于etree的不同之处:
    • 取文本/属性:返回的是一个Selector对象,文本数据是存储在该对象中,
      可以调用extract()/extract_first()取出字符串数据
    • 常用操作:
    • 直接使用xpath返回列表调用extract()/extract_first()
    • 如果列表元素只有一个则调用extract_first(),返回的字符串
    • 如果列表元素为多个则调用extract(),返回的是列表,列表里装的是字符串
    • 持久化存储
    • 基于终端指令的持久化存储
    • 只可以将parse方法的返回值存储到指定后缀(csv)文本文件中
    • 指令:scrapy crawl spiderName -o filePath
    • 基于管道的持久化存储
    • 实现流程:
      1.数据解析(爬虫文件)
      2.在item类中定义相关的属性(items.py)
    • fieldName = scrapy.Field()
      3.将解析的数据存储封装到item类型的对象中(爬虫文件)
    • item[‘fieldName’] = value #给item对象的fieldName属性赋值
      4.将item对象提交给管道(爬虫文件)
    • yield item #只可以将item提交给优先级最高的管道
      5.在管道中接收item,可以将item中存储的数据进行任意形式的持久化存储(pipelines.py)
    • process_item():负责接收item对象且对其进行持久化存储
      6.在配置文件中开启管道机制
    • ITEM_PIPELINES = {
      300:表示的是优先级,数值越小优先级越高
      ‘duanziPro.pipelines.DuanziproPipeline’: 300,
      }
    • 细节处理
    • 管道文件中的管道类表示的是什么
    • 一个管道类对应的就是一种存储形式
    • 如果想要实现数据备份,则需要使用多个管道类(多种存储形式=》mysql/redis)

    process_item中的return item:

    • 将item传递给下一个即将被执行的管道类

    手动get请求发送

    yield scrapy.Request(url,callback)
    url:指定好的请求的url
    callback:callback指定的回调函数一定会被执行(数据解析)
    post请求的发送:
    yield scrapy.FormRequest(url,callback,formdata)
    yield在scrapy中的使用

    向管道提交item对象:yield item
    手动请求发送:yield scrapy.Request(url,callback)
    问题:如何将start_urls中的元素进行post请求的发送

    重写start_requests方法
    def start_requests(self):#父类方法
    for url in self.start_urls:
    发起get请求
    yield scrapy.FormRequest(url=url,callback=self.parse,formdata)
    scrapy的五大核心组件
    引擎(Scrapy)
    用来处理整个系统的数据流处理, 触发事务(框架核心)
    调度器(Scheduler)
    用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
    下载器(Downloader)
    用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
    爬虫(Spiders)
    爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
    项目管道(Pipeline)
    负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

    python
  • 相关阅读:
    Linux的常用目录学习笔记
    htm,html,xhtml,xml,xsl,dhtml,shtm和shtml的区分
    js中迭代元素特性与DOM中的DocumentFragment类型 笔记
    查找算法--线性结构的查找方法
    有关rand(),srand()产生随机数学习总结
    nodejs版本管理工具nvm使用说明
    解决微信端公众号网页获取短信验证码ajax重复调用两次的问题
    判断安卓苹果ipad,iphone,微信
    css的对号错号,也就是勾和叉
    flex的一些方法注释或者叫flex笔记
  • 原文地址:https://www.cnblogs.com/bky20061005/p/12172575.html
Copyright © 2020-2023  润新知