爬虫串讲

爬虫串讲

requests

一定要掌握

爬取数据流程:

  1. 指定url
  2. 发起请求
  3. 获取响应数据
  4. 数据解析
  5. 持久化存储

get,post参数:

  • url
  • data/params
  • headers
  • proxies

处理ajax动态加载的数据:

  • 动态加载的数据: 通过另一个请求请求到的数据
  • 通过抓包工具捕获请求对应的数据包,数据包之间实现局部或者全局搜索

模拟登陆:

  • 对点击登录按钮对应的post请求进行请求发送
  • 动态变化的请求参数:
    • 一般会隐藏在前台页面

打码平台使用:

  • 超级鹰,云打码

cookie的处理:

  • 手动处理

    • 将cookie从抓包工具对应数据包的头信息中进行捕获,粘贴在headers中
  • requests.Session()自动处理
    • session . requests.Session()

    aaa=123; time=1506660011

代理ip:

  • 类型: http, https

线程池:

  • dummy import Pool
  • map(func,list)

图片懒加载: 伪属性所对应的

单线程+多任务异步协程

  • 协程: 特殊的对象. 一个被aynic关键字修饰的函数定义,该函数被调用后会马上返回一个协程对象
  • 任务对象: 就是对协程对象的进一步封装
    • 绑定回调:def callback(task) : return task.result()
    • task.add_done_callback(callback)
  • 任务列表: 多个任务对象
  • 事件循环对象:任务列表是需要注册到事件循环对象中,然后事件循环开启后,则会将任务列表中的每一个任务对象进行异步调用
  • aiohttp:是一个基于异步的网络请求模块

数据解析: 1 定位标签 2 数据提取

  • 正则表达式:
  • bs4:
  • xpath:

selenium

  • 关联:

    • 1.便捷的捕获到动态加载的数据(可见即可得)
    • 2.实现模拟登陆
  • 作用:
    • 实现浏览器自动化的相关操作
  • 使用流程:
    • 环境安装
    • 下载浏览器的驱动程序
    • 实例化浏览器对象
    • 制定相关的行为动作
    • 关闭浏览器
  • find系列函数:
    • 定位标签
  • switch_to.frame(iframe的id)函数
    • 切换iframe
  • 无头浏览器(随用随粘)
  • 规避监测
  • phantomJs:(无头浏览器)
  • 谷歌无头浏览器:
  • 动作连:from selenium.webdriver import ActionChains

scrapy

  • 项目创建流程:

    • scrapy startprojecct proName
    • cd ProName
    • scrapy genspider spiderName www.xxx.com
    • scrapy crawl spiderName
  • 数据解析:
    • response.xpath(‘xpath表达式‘)
    • xpath返回的列表中存储的是Selector对象,解析的字符串类型的数据是被存储在了该对象中.获取字符串类型的数据必须extract()或者extract_first()
  • 持久化存储:
    • 基于终端指令的持久化存储

      • scrapy crawl spiderName -o filePath
    • 管道:
      • 数据解析
      • 存储封装到item类型的对象中
      • 将item提交给管道
      • 在管道类的process_item(item,spider)方法中接收item,对item进行任意形式的持久化存储
      • 在settings中开启管道
      • 注意事项:
        • 开启管道的时候,管道的优先级,数值越小优先级越高
        • 一个管道类表示将数据存储到某一个具体的平台中
        • process_item的return item表示的是将item传递给下一个即将被执行的管道类
        • 爬虫类提交的item只会提交给优先级最高的管道
  • 处理分页数据:
    • 全站数据爬取

      • 手动请求发送: yield scrapy.Request/FormRequest(url,callback,formdata)
  • post请求
  • cookie处理:
  • 日志等级:
    • LOG_LEVEL = "ERROR"
  • 请求传参:
    • 使用场景:

      • 实现数据的深度爬取(爬取的数据没有存在同一张页面中)
    • 如何实现请求传参
      • yield scrapy.Request/FormRequest(url,callback,formdata)

        :meta就会将自己传递给callback,在callback中使用reponse.meta进行字典的接收

  • 五大核心组件原理:
  • 下载中间件:
    • process_request : 拦截正常的请求

      • UA伪装

        • request.headers[‘User-Agent‘] = ‘xxx‘
      • 代理设定
    • process_response : 篡改响应内容或者替换响应对象
    • process_exception
      • 对异常的请求进行拦截
      • 对异常的请求进行修正
      • return request的操作将修正后的请求对象进行重新的请求发送
  • UA池和代理池:
  • selenium在scrapy中的应用:
    • 1.在爬虫类添加一个属性,将属性作为浏览器对象.
    • 2.在爬虫类的closed(self,spider)方法中关闭浏览器对象
    • 3.在中间件的process_reponse中获取浏览器对象,实现自动化相关的操作 (比如滚轮向哪拖动)
  • crawlSpider:
    • 全站数据爬取
    • LinkExtractor(allow=‘正则‘)
      • 根据指定的规则(正则)进行连接(url)的提取
    • Rule(link,callback,follow=True)
      • 接收连接提取器提取到的连接,对其进行请求发送,然后将请求到的数据进行指定规则的解析

分布式

scrapy 为何不能实现分布式:

  • 调度器和管道不可以被共享

scarpy_redis的作用:

  • 提供了可以被共享的

反爬机制总结

robots.txt
UA检测
验证码
数据加密
cookie
禁IP
动态token
数据动态加载
js加密
js混淆
图片懒加载

数据清洗

空值检测 删除空值所在的行数据:df.dropna(axis=0)
空值检测填充空值: df.fillna(method='ffill',axis=0)
异常值检测和过滤:
    判定异常值的条件
重复行检测和删除:
    df.drop_duplicated(keep='first')

面试题

  1. 写出在网络爬取过程中, 遇到防爬问题的解决办法。
  2. 如何提高爬虫的效率?
    1. requests+线程池
    2. asyncio+aiohttp
    3. scrapy
    4. 分布式(终极)
  3. 你的爬虫 爬取的数据量有多少?
  4. 列举您使用过的 python 网络爬虫所用到的模块。
    • 网络请求:urllib,requests,aiohttp
    • 数据解析:re,bs4,lxml
    • selenium
    • dummy,asyncio,pyExcl
  5. 简述 requests 模块的作用及基本使用?
  6. 简述 beautifulsoup 模块的作用及基本使用?
  7. 简述 seleninu 模块的作用及基本使用?
  8. 简述 scrapy 框架中各组件的工作流程?
  9. 在 scrapy 框架中如何设置代理(两种方法)?
  10. scrapy 框架中如何实现大文件的下载?
  11. scrapy 中如何实现限速?
  12. scrapy 中如何实现暂定爬虫?
  13. scrapy 中如何进行自定制命令?
  14. scrapy 中如何实现的记录爬虫的深度?
  15. scrapy 中的 pipelines 工作原理?
  16. scrapy 的 pipelines 如何丢弃一个 item 对象?
  17. 简述 scrapy 中爬虫中间件和下载中间件的作用?
  18. scrapy-redis 组件的作用?
  19. scrapy-redis 组件中如何实现的任务的去重?
  20. scrapy-redis 的调度器如何实现任务的深度优先和广度优先?

移动端数据的抓取:

  • fiddler,青花瓷,miteproxy

抓取过哪些类型的数据,量级是多少?

  • 电商,医疗器械,新闻资讯,股票,金融,招聘,工程招标

    100万 剩下的100一下, 20w...

爬虫框架

  • scrapy,pyspider(了解)

谈谈对scrapy的了解

  • scrapy的功能模块
  • 五大核心组件的工作流程

如何解析出携带标签的局部页面数据 :

  • 用bs4

中间件的了解

  • 下载中间件

    • 作用:批量拦截请求和响应

      • 拦截请求

        • UA伪装,代理
      • 拦截响应
        • 篡改响应内容

如何检测网站数据更新?

  • 增量式

    定时去爬取, shell脚本定时

深度优先 scrapy默认的 不全部保留节点 占用空间大;运行速度快

广度优先 保留全部节点 占用空间小;运行速度慢

了解过机器学习

  • sklearn #入门级别,但是封装了很多,可以用

    • 线性回归
    • KNN (手写数字识别,验证码识别)

      预测房价

原文地址:https://www.cnblogs.com/Doner/p/11468658.html

时间: 2024-08-29 23:02:45

爬虫串讲的相关文章

串讲Apache OFBiz技术架构

从决定读ApacheOFBiz源码到现在不知不觉一年就过去了.这一年因为各种原因,导致源码读得断断续续.其实最大的问题还是因为无法深刻得理解里面的一些东西,导致热情骤减.直到最近,公司在开发的一个"应用快速开发平台"引发了我的一些思考,所以决定再把源码拿出来重新阅读.到最近对其架构设计近乎迷恋. 个人认为对于ApacheOFBiz的剖析可以分成三大块来进行:技术.业务.数据库设计.这三块个个都是非常顶尖的水准,每个方向深入进去都可以学到很多东西.之前只是对OFBiz各个部分的单独解析,

0607pm克隆&引用类&加载类&面向对象串讲&函数重载

克隆class Ren{ public $name; public $sex; function __construct($n,$s) { $this->name=$n; $this->sex=$s; } function __clone()//改变克隆的对象内容 { $this->name="李思思";//this代表复本对象 $that->name="李思思";//that代表原本的,后来废弃了 }}$r=new Ren("张丹

MBA写作串讲笔记 1

写作串讲笔记1 串讲目录 l   论证分析:析错有口诀 l   审题立意:区分评于立 l   开篇秘籍:不再怕走题 l   框架制胜,三点定高低 临别叮嘱(7点) 1.     继续热身:继续热身,防止手生 2.     写作模板:取题.开篇.结尾和本论部分的标准写法和框架 3.     常用词汇:常用的形式性词汇要熟练.要背诵 4.     本论部分:最好写四段,每段最好六行左右. 5.     字数要求:最好31.32行.(千万不要少!) 6.     抄背范文:多朗读.多抄写经典范文,以提

2016年5月信息系统项目管理师临门一脚重点串讲

2016年5月信息系统项目管理师临门一脚重点串讲,http://edu.51cto.com/course/course_id-5868.html jcliming 5分 重点突出,思路清晰,切中要害! 张老师很敬业,严重的感冒还坚持讲课,赞一个. 2016-04-25 22:29:47 wangliminghs 5分 张老师的课讲的很好,受益匪浅. 2016-05-02 21:51:31 fzqnet 5分 比较了一下,还是张老师的课程比较好!全五星 2016-05-02 17:02:30 旨在

2016年5月信息系统项目管理师临门一脚重点串讲(综合知识、案例分析、重点论文、计算题)

http://edu.51cto.com/course/course_id-5868.html 1.旨在帮助大家快速通过软考,少受备考的折磨与孤独. 2.28小时,不到2天的时间,快速学完100天的内容 3.着重梳理综合知识重点高频考点,快速提升大家综合知识得分能力 4.多角度剖析案例分析,提升大家案例分析应试能力. 5.从论文框架与模版.到重点论文的准备,尽在掌控. 为帮助大家提高复习效率,以最小的代价通过信息系统项目管理师,本套软考冲刺临门一脚,从以下方面进行课程优化与组合:1.信息化或计算

Solr相关知识点串讲

Solr是Apache Lucene的一个子项目.Lucene为全文搜索功能提供了完备的API,但它只作为一个API库存在,而不能直接用于搜索.因此,Solr基于Lucene构建了一个完整的搜索引擎,它可以为搜索引擎添加文档,对文档内容进行分析,并为用户提供搜索功能,在此基础上提供了一个扩展功能,如hit highline, suggetion等. 一.概述 (一)基础内容 1.Solr的版本号与Lucene的版本号保持一直,直到2014年7月,最新版本号为4.9.0. 2.Solr提供了一个e

JS超级无敌大串讲!!!!!

今天来回顾一下JS的基础和使用方法!没有提纲全靠写了= = 首先来讲下运算符好了,和C#的运算符是基本相同的 数学运算符:+    -    *    /    %    ++    -- 关系运算符:==    !=    >=    <=    >    < 逻辑运算符:&&    ||    ! 其他运算符:+=    -=    *=    /=    %=    ? 整理一下发现不是基本相同.就他妈一个样! 再来说下数组好了 数组其实也没什么不同,只是JS

.NET 基础串讲

C#基础 .NET介绍 ?计算机发展史 第一代语言:机器语言 0101 第二代语言:汇编语言, 用一些简洁的英文字母.符号串来替代一个特定指令的二进制串 第三代语言:接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用 ?编译运行过程: C#语言—公共语言规范(CLS)的编译器—MSIL(中间语言或程序集) —公共语言运行库(CLR)中编译器—操作系统执行代码 ?两次编译过程用途: 第一次是为了将不同语言编译成中间语言形成程序集: 第二次为了CLR针对不同操作系统

java串讲之String 如何定义字符串对象

如何定义字符串对象?String s = "abc";只要是双引号引起的数据都是字符串对象. 特点:字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中.因为String类是final修饰的 ------------------------------------------------------ String s1 = "abc"; // s1指向的内存中只有一个对象abc. String s2 = new String("abc")