selenium和scrapy基础

本文介绍了Python爬虫中的selenium和scrapy基础,包括多任务异步协程、selenium的基本使用、scrapy框架的下载与项目开启、数据持久化存储方法。还探讨了selenium的无头浏览器、模拟登录、规避检测技巧,以及scrapy的五大核心组件、中间件和分布式爬虫的实现。
摘要由CSDN通过智能技术生成

selenium和scrapy基础

1 多任务异步协程基础

  • 编码流程

    • 创建协程对象
    • 创建任务对象
    • 创建事件循环对象
    • 将任务注册到事件循环对象中
  • 特殊的函数:使用async修饰函数,则该函数就是一个特殊的函数,

    • async def get_request(url):
          print('正在请求:',url)
          sleep(1)
          print('请求结束:',url)
      
  • 协程对象:特殊函数被调用后函数内部的实现语句不会被立即执行,该函数调用后会返回一个协程对象

    • c = get_request('www.1.com')
      
  • 任务对象:任务对象就是对协程对象的进一步的封装

    • 任务对象 == 高级的协程对象 == 特殊的函数调用

    • 创建任务对象

      • task = asyncio.ensure_future('协程对象')
        
    • 绑定回调

      • 任务对象结束之后执行回调函数

      • #绑定回调
        task.add_done_callback(parse)
        def parse(task): # tesk参数能获取特殊函数的返回值
            print('i am task callback()!!!=----',task.result()) # task。result()就是特殊函数的返回值
        
  • 事件循环对象

    • #创建一个事件循环对象
      loop = asyncio.get_event_loop()
      
    • 作用:将注册在事件循环对象的任务对象进行异步执行

    • #将任务对象注册到事件循环对象中并且开启事件循环
      loop.run_until_complete(task),# 不修饰task会报错
      loop.run_until_complete(asyncio.wait(tasks))
      
  • 注意事项:在特殊函数内部的实现语句中不可以出现不支持异步的模块对应的代码,否则就是终止多任务异步协程的异步效果,例如time模块,requests模块

    • # 替代time模块
      await asyncio.sleep(3) # 必须加await让程序等待阻塞完成
      
    • aihttp模块

      • 编码流程

        • 基本架构

          • with aiohttp.ClientSession() as s:
            	with await s.get(url) as response:
                    page_text = response.text()
                    return page_text
            
        • 补充细节

          • 添加async关键字

            • 每一个with前加async
          • 添加await关键字

            • 加在每一步的阻塞操作前加await
              • 请求
              • 获取响应数据(规定)
          • async with aiohttp.ClientSession() as s:
                #get/post:proxy = 'http://ip:port' 不一样,不是字典了
                #url,headers,data/prames跟requests一样
                async with await s.get(url) as response:
                    page_text = await response.text()#text()字符串形式的响应数据。read()二进制的响应数据
                    return  page_text
            
      • 支持异步的网络请求模块替代requests模块发起网络请求,请求完毕要close,使用with自动化关闭

      • async def get_request(url):
            async with aiohttp.ClientSession() as s:
                #get/post:proxy = 'http://ip:port' 不一样,不是字典了
                #url,headers,data/prames跟requests一样
                async with await s.get(url) as response:
                    page_text = await response.text()#text()字符串形式的响应数据。read()二进制的响应数据
                    return  page_text
        

2 . selenium

  • 概念: 基于浏览器自动化的一个模块,

  • Appnium是基于手机的自动化模块

  • 作用

    • 便捷的爬取到动态加载的数据,可见即可得
    • 便捷的实现模拟登陆,
  • 基本使用

    • 环境安装
      • pip install selenium
  • 下载浏览器的驱动程序

    • http://chromedriver.storage.googleapis.com/index.html
  • 浏览器版本和驱动程序的映射关系

  • https://blog.csdn.net/huilan_same/article/details/51896672

  • 动作链

    • from selenium.webdriver import ActionChains #动作连的类
      
    • #基于动作连实现滑动操作
      action = ActionChains(bro)
      #点击且长按
      action.click_and_hold(div_tag)
      
      for i in range(5):
          #perform()表示让动作连立即执行
          action.move_by_offset(20,20).perform()
          sleep(0.5)
      
    • 在使用find系列的函数进行标签定位的时候如果出现了NoSuchElementException如何处理?
      - 如果定位的标签是存在于iframe标签之下的,则在进行指定标签定位的时候
      必须使用switch_to.frame()的操作才可。

      - ```
          bro.switch_to.frame('iframeResult') #frame的参数为iframe标签的id属性值
          ```
      
  • 无头浏览器

    • from selenium.webdriver.chrome.options import Options
      # 创建一个参数对象,用来控制chrome以无界面模式打开
      chrome_options = Options
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值