zoukankan      html  css  js  c++  java
  • 爬虫面试资料

    四、scrapy和scrapy-redis
    1. 描述下scrapy框架运行的机制?
    答:从start_urls里获取第一批url并发送请求,请求由引擎交给调度器入请求队列,获取完毕后,调度器将请求队列里的请求交给下载器去获取请求对应的响应资源,并将响应交给自己编写的解析方法做提取处理:1. 如果提取出需要的数据,则交给管道文件处理;2. 如果提取出url,则继续执行之前的步骤(发送url请求,并由引擎将请求交给调度器入队列...),直到请求队列里没有请求,程序结束。


    2. scrapy和scrapy-redis有什么区别?为什么选择redis数据库?
    答:
    1) scrapy是一个Python爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式。而scrapy-redis一套基于redis数据库、运行在scrapy框架之上的组件,可以让scrapy支持分布式策略,Slaver端共享Master端redis数据库里的item队列、请求队列和请求指纹集合。
    2) 为什么选择redis数据库,因为redis支持主从同步,而且数据都是缓存在内存中的,所以基于redis的分布式爬虫,对请求和数据的高频读取效率非常高。


    3. 反爬虫的机制有哪些?
    答:
    1) User—Agent
    2) 代理ip
    3) 访问频率限制
    4) 验证码处理
    5) Cookie
    6) 动态HTML数据加载


    4. 实现模拟登录的方式有哪些?
    答:
    1) 使用一个具有登录状态的cookie,结合请求报头一起发送,可以直接发送get请求,访问登录后才能访问的页面。
    2) 先发送登录界面的get请求,在登录页面HTML里获取登录需要的数据(如果需要的话),然后结合账户密码,再发送post请求,即可登录成功。然后根据获取的cookie信息,继续访问之后的页面。


    5. get和post请求有什么区别?分别应该在什么场合下。
    答:
    1) get请求用于直接获取指定url的响应数据,和服务器没有交互信息。
    2) post请求在获取响应数据前,会先发送form表单,服务器会根据form表单来返回响应数据。


    6. Selenium、PhantomJS是什么?可以为爬虫做哪些事情?
    答:
    1) Selenium是一种自动测试化工具,可以导入使用指定的浏览器,在发送请求获取响应后,响应数据则会在指定的浏览器里执行完毕。而PhantomJS是一种无界面浏览器,相比传统的Chrome或Firefox浏览器等,资源消耗会更少。
    2) 在Python爬虫代码里使用Selenium和PhantomJS组合,相当于真实浏览器的执行状态,可以直接获取动态HTML数据(如JavaScript、Ajax加载的数据等),并且支持模拟键盘事件、鼠标点击事件、执行JavaScript语句等。在一些反爬虫极端情况下,Selenium+PhantomJS可以作为终极解决方案。


    7、简单介绍下scrapy的异步处理。
    答:scrapy框架的异步机制是基于twisted异步网络框架处理的,在settings.py文件里可以设置具体的并发量数值(默认是并发量16)。

  • 相关阅读:
    Delphi-基础(for循环)
    Delphi-基础(运算符)
    Delphi-基础
    python 序列化
    python 模块、包
    time,datetime,random,os,sys,hashlib,logging,configparser,re模块
    第一章.Python环境安装&Pycharm日常使用
    第一章.变量.常量.注释.运算符.if流程控制
    Redis持久化数据介绍&主从复制和哨兵模式环境部署
    Redis缓存应用安装部署&常见的数据类型
  • 原文地址:https://www.cnblogs.com/snailon/p/9032697.html
Copyright © 2011-2022 走看看