前几天看了一本书《Python网络爬虫从入门到实践》,写的非常的好,确实是从入门爬虫概念到掌握爬虫的方方面面,今天就来简单的总结一下。

爬虫的流程

所有的爬虫无非就是这三步:

  1. 获取网页
  2. 解析网页(提取数据)
  3. 存储数据

获取页面,我们可以使用 requesturllibseleni-um 类似的请求库,一些进阶的技术如:多进程和多线程和多协程,ip池,服务器抓取等。

解析网页可以使用 re正则表达式beautifulSouplxml 之类的库,进阶技术就是解决中文乱码问题。

存储数据,可以使用txt文件,csv文件,或者数据库Mysql,Mondodb来存储。

动态网页抓取

对于 ajax请求的动态数据,我们可以使用 selenium 来抓取,它可以模拟真实用户操作一个浏览器,解决在网页源代码中找不到动态数据的问题。

Scrapy框架

这个框架是比较有名的 python 爬虫库,它无非是将前面我们用到的工具规范化,标准化了,基本流程也是上面说的爬虫三大步,不光它还有一些封装的好处,如并发,中间件等功能。

提升爬虫的速度

  1. 多线程爬虫
  2. 多进程爬虫
  3. 多携程爬虫

并发和并行

并发是指在一个时间段内发生若干事件的情况,并行是指在同一时刻发生若干事件的情况。

同步和异步

在并发和并行框架的基础上理解同步和异步,同步就是并发或并行的各个任务不是独自运行的,任务之间有一定的交替顺序,可能在运行完一个任务得到结果后,另一个任务才会开发运行。

异步则是并发或并行的各个任务可以独立运行,一个任务的运行不受另一个任务的影响,任务之间就像比赛的各个选手在不同的赛道比赛一样。

多线程爬虫

多线程爬虫是以并发的方式执行的,也就是说,多个线程并不能真正的同时执行,而是通过进程的快速切换加快网络爬虫速度的。

在Python中,使用多线程爬虫可以用 threading 库或 queue库。

多进程爬虫

多线程爬虫可以利用 CPU 的多核来进行加速。

使用 multiprocess库的两种方法:

  1. 使用 process + queue
  2. 使用 pool+ queue

多协程爬虫

协程是一种用户态的轻量级线程,使用协程有众多好处:

  1. 对系统消耗较小,速度也很快
  2. 方便切换控制流
  3. 高扩展性和高并发性

当然,也有缺点:

  1. 本质是一个单线程,不能同时使用单个CPU的多核,需要和进程配合才能运行在多CPU上
  2. 有长时间阻塞的IO操作时不要使用协程,可能会阻塞整个程序

反爬虫

通常遇到反爬虫的问题:

  1. 不返回网页,不返回或延迟返回时间
  2. 返回的网页非目标网页,如返回错误页
  3. 需要登录和验证码的阻碍

应对反爬虫

  1. 修改请求头
  2. 修改爬虫间隔时间
  3. 使用代理
  4. 更换ip地址
  5. 登录获取数据
  6. 使用ocr识别验证

分布式爬虫

使用 redis 可以让多个服务器运行同一个爬虫任务,并且数据存储在同一个地方。

欢迎关注微信公众号【程序员小兵】,陪你一起学习电脑技术。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。