面试整理:爬虫

爬虫相关

requests和bs4模块

1、requests模块常用参数有哪些?

#常用参数:
url
headers 
cookies 
data 
json 
params 
proxy

2、requests模块常用返回值有哪些?

#常用返回值
content
iter_content
text 
encoding="utf-8"
cookie.get_dict()

3、bs4常用方法有哪些?

#常用方法
解析:html.parser  或者 lxml(需要下载安装) 
find 
find_all
text 
attrs
get 

4、常见的请求头有哪些?

# 常见请求头:
 user-agent
 host
 referer
 cookie 
 content-type 

5、爬取对象时注意

#套路:
- 先给你cookie,然后再给你授权。
- 凭证
#轮询+长轮询(例如web微信)

Scrapy框架相关

    - scrapy 
        - 高性能相关,单线程并发发送Http请求
            - twisted
            - gevent 
            - asyncio
          本质:基于IO多路复用+非阻塞的socket客户端实现
          问题:异步非阻塞?
          
          问题:什么是协程?
          
        - scrapy框架
            - scrapy执行流程(包含所有组件)
            - 记录爬虫爬取数据深度(层级),request.meta['depth']
            - 传递cookie
                - 手动 
                - 自动:meta={'cookiejar':True}
                
            - 起始URL
            - 持久化:pipelines/items 
            - 去重
            - 调度器
            - 中间件 
                - 下载中间件
                    - agent
                    - proxy 
                - 爬虫中间件
                    - depth 
            - 扩展+信号 
            - 自定义命令
        - scrapy-redis组件,本质:去重、调度器任务、pipeline、起始URL放到redis中。
            - 去重,使用的redis的集合。
            - 调度器,
                    - redis列表
                        - 先进先出队列
                        - 后进先出栈
                    - redis有序集合
                        - 优先级队列
                    
                    PS:深度和广度优先
            - pipelines
                    - redis列表 
            
            - 起始URL 
                    - redis列表
                    - redis集合
                    
            补充:
                自定义encoder实现序列化时间等特殊类型:
                    json.dumps(xx,cls=MyEncoder)

 轮询

6、什么是轮询?

可简单理解为:
#通过定时器让程序每隔n秒执行一次操作。

7、什么是长轮询?

#浏览器向后端发起请求,后端会将请求 hang 住;
#规定时间内如果不返回数据,则超时断开,紧接着用户立即再发送请求。
#如果有数据返回:则操作数据并立即再发送请求。

#PS:后台可以使用队列或redis的列表来hang主请求。

8、轮询和长轮询的目的?

#由于Http请求是短连接、无状态,所以服务端无法向客户端实时推送消息,
#所以,我们可以使用:轮训和长轮训去服务端获取实时数据。

9、轮询之间的优缺点?

#轮询
    优点:简单
    缺点:请求次数多,服务器压力大,消息延迟
#长轮询
    优点:实时接收数据,兼容性好
    缺点:请求次数比原来少,但是相对原来也不少
#websocket
    优点:代码简单,不再重复创建连接
    缺点:兼容性没有长轮询好

 

posted @ 2018-05-18 21:45  ZhuGaochao  阅读(271)  评论(0编辑  收藏  举报