前几天看了一本书《Python网络爬虫从入门到实践》,写的非常的好,确实是从入门爬虫概念到掌握爬虫的方方面面,今天就来简单的总结一下。
爬虫的流程
所有的爬虫无非就是这三步:
- 获取网页
- 解析网页(提取数据)
- 存储数据
获取页面,我们可以使用 request
,urllib
,seleni-um
类似的请求库,一些进阶的技术如:多进程和多线程和多协程,ip池,服务器抓取等。
解析网页可以使用 re正则表达式
,beautifulSoup
和 lxml
之类的库,进阶技术就是解决中文乱码问题。
存储数据,可以使用txt文件,csv文件,或者数据库Mysql,Mondodb来存储。
动态网页抓取
对于 ajax
请求的动态数据,我们可以使用 selenium
来抓取,它可以模拟真实用户操作一个浏览器,解决在网页源代码中找不到动态数据的问题。
Scrapy框架
这个框架是比较有名的 python 爬虫库,它无非是将前面我们用到的工具规范化,标准化了,基本流程也是上面说的爬虫三大步,不光它还有一些封装的好处,如并发,中间件等功能。
提升爬虫的速度
- 多线程爬虫
- 多进程爬虫
- 多携程爬虫
并发和并行
并发是指在一个时间段内发生若干事件的情况,并行是指在同一时刻发生若干事件的情况。
同步和异步
在并发和并行框架的基础上理解同步和异步,同步就是并发或并行的各个任务不是独自运行的,任务之间有一定的交替顺序,可能在运行完一个任务得到结果后,另一个任务才会开发运行。
异步则是并发或并行的各个任务可以独立运行,一个任务的运行不受另一个任务的影响,任务之间就像比赛的各个选手在不同的赛道比赛一样。
多线程爬虫
多线程爬虫是以并发的方式执行的,也就是说,多个线程并不能真正的同时执行,而是通过进程的快速切换加快网络爬虫速度的。
在Python中,使用多线程爬虫可以用 threading
库或 queue
库。
多进程爬虫
多线程爬虫可以利用 CPU 的多核来进行加速。
使用 multiprocess
库的两种方法:
- 使用
process
+queue
- 使用
pool
+queue
多协程爬虫
协程是一种用户态的轻量级线程,使用协程有众多好处:
- 对系统消耗较小,速度也很快
- 方便切换控制流
- 高扩展性和高并发性
当然,也有缺点:
- 本质是一个单线程,不能同时使用单个CPU的多核,需要和进程配合才能运行在多CPU上
- 有长时间阻塞的IO操作时不要使用协程,可能会阻塞整个程序
反爬虫
通常遇到反爬虫的问题:
- 不返回网页,不返回或延迟返回时间
- 返回的网页非目标网页,如返回错误页
- 需要登录和验证码的阻碍
应对反爬虫
- 修改请求头
- 修改爬虫间隔时间
- 使用代理
- 更换ip地址
- 登录获取数据
- 使用ocr识别验证
分布式爬虫
使用 redis
可以让多个服务器运行同一个爬虫任务,并且数据存储在同一个地方。
欢迎关注微信公众号【程序员小兵】,陪你一起学习电脑技术。
评论(0)