• 工程的创建


    工程的创建

    • cd

    • 数据解析

      • 请求发送:start_urls
      • 函数:parse
      • start_requests方法:
        • 就是讲start_urls中的url进行get请求的发送
      • xpath进行的解析
        • etree解析的区别:
          • extract():有多个元素的列表中
          • extract_first():只有一个元素的列表中
    • 持久化存储

      • 基于终端指令
        • 只可以将数据存储到指定后缀的文本文件中
        • 存储的数据必须为parse方法的返回值
        • 指令:scrapy crawl spiderName -o filePath
      • 基于管道
        • 1.解析数据
        • 2.在item类中定义相关的属性
          • name = scrapy.Field()
        • 3.解析到的数据存储到item类型的对象
        • 4.将item提交给管道
          • yield item
        • 5.在管道中接受item(process_item),进行任意形式的持久化存储
        • 6.开启管道
      • 注意事项:
        • 一个管道类对应什么
          • 一个管道类对应一种形式的存储
        • process_item=》return item
    • 手动请求发送

      • get:
        • yield scrapy.Request(url,callback)
      • post:
        • yield scrapy.FormRequest(url,callback)
    • 核心组件

      • 引擎
        • 事务的触发
      • spider
        • 产生url,发起请求,数据解析
      • 调度器
        • 过滤器
        • 队列
      • 管道
      • 下载器
    • 今日内容

      • 请求传参
        • 作用:实现深度爬取
        • 什么深度爬取:
          • 爬取的数据没有存在于同一张页面中
        • 在进行手动请求发送的时候可以将一个meta字典传递给callback指定的回调函数
          • yield scrapy.Request(url,callback,meta)
          • 在回调函数中如何接收meta:
            • response.meta['key'] #将meta字典中key对应的value值取出
      • 中间件
        • 爬虫中间件:位于引擎和Spider中间
        • 下载中间件:位于引擎和下载器中间(推荐)
          • 作用:拦截请求和响应
          • 为什么需要拦截请求?
            • UA伪装(篡改请求的头信息)
              • process_request
                • request.headers['User-Agent'] = 'xxx'
            • 设置代理
              • process_exception:
                • request.meta['proxy'] = 'http://ip:port'
                • return request:将修正后的请求对象进行重新发送
          • 为什么需要拦截响应?
            • 篡改响应数据
          • 网易新闻数据爬取
            • 实现流程:
              • 1.解析出5个板块对应页面的url
              • 2.对五个板块的url发起请求
              • 3.获取板块的页面源码数据
                • 问题:板块的页面源码数据(响应数据)中没有包含新闻的标题和新闻详情页的url(动态加载的数据)
                • 处理:将响应对象的响应数据进行篡改,将其该为包含动态加载数据的响应数据
            • selenium帮助我们捕获到包含了动态加载的响应数据
              • selenium在scrapy中如何使用
                • 实例化一个浏览器对象(爬虫文件中)
                • 在中间件的process_response中进行selenium后续的操作
                • 在爬虫文件的爬虫类中重写一个closed(self,spider),关闭浏览器
    • 作业:

    • 将网易新闻的新闻数据进行爬取

      • title
      • content
    • 基于百度AI将新闻的类型和关键字进行提取

    • 持久化存储:

      • mysql

        • 库表:
          • 新闻标题
          • 新闻内容
          • 新闻类型
          • 新闻关键字
      • error:

        • x0x无法被gbk识别
          • s.replase('x0x','')
    python
  • 相关阅读:
    httpclient在获取response的entity时报异常
    SpringCloud项目,接口调用返回http 500
    使用maven插件生成grpc所需要的Java代码
    win10 无法修改默认程序 默认打开方式的解决方法
    mock.js中新增测试接口无效,返回404
    echarts的pie图中,各区块颜色的调整
    HashMap源码注释翻译
    netty学习记录2
    netty学习记录1
    Java-JNA使用心得2
  • 原文地址:https://www.cnblogs.com/bky20061005/p/12176666.html
Copyright © 2020-2023  润新知