工程的创建

工程的创建

  • 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','')
posted @ 2020-01-10 16:16  xiongsheng  阅读(97)  评论(0编辑  收藏  举报