什么是python爬虫?
很多人学习python编程语言之后,不知道爬虫是什么,相信大家对“爬虫”这个词并不陌生,在不了解爬虫的人群中,就会觉得这是个很高端神秘的技术。
如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,
沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序;
从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。
python爬虫原理
模拟用户在浏览器或者App应用上的操作,把操作的过程、实现自动化的程序,大致分为以下4个基本流程:
(1)发起请求
通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应。
(2)获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型。
(3)解析内容
得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
(4)保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件。
python爬虫能干什么?
现在爬虫可以做的事情非常多,数据、信息、电影、资料等,你技术过关了,爱咋爬咋爬,仔细观察,加上你如果认真观察,就会发现学习爬虫的人越来越多,一点是互联网对于信息数据的需求越来越多,第二点是Python这种强大又简单的编程语言容易学习,而且世界上80%的爬虫都是由它来完成的,简单、易上手是它的优势。
爬虫的入门选择Python最好的方法,因为Python有很多应用的方向,如后台开发、web开发、科学计算等等,但爬虫对于初学者而言更友好,原理简单,几行代码就能实现基本的爬虫,学习的过程更加平滑,你能体会更大的成就感。
掌握基本的爬虫后,你再去学习Python数据分析、web开发甚至机器学习,都会更得心应手。因为这个过程中,Python基本语法、库的使用,以及如何查找文档你都非常熟悉了。
如何学习python爬虫?
对于新手来说,爬虫也许是非常复杂、技术门槛很高的事情。比如有人认为学爬虫必须精通 Python,然后埋头苦干学习 Python 的每个知识点、狂敲各种代码,直到很久之后,发现仍然爬不了数据,又懊恼实在太难了;有的人则认为先要掌握网页的知识,遂开始学习HTMLCSS,结果走了歪路,并在这条路上越走越远直到头发掉光......
其实掌握正确的方法,在短时间内做到能够爬取主流网站的数据,其实非常容易实现,但建议你从一开始就要有一个具体的目标。
在这里给大家推荐的这本《python3网络爬虫开发实战》的作者是崔庆才,静觅博客的博主(https://cuiqingcai.com/)。
这本书涵盖的知识范围很广,比如基础的:
HTTP基本原理和网页的基本原理。建议大家如果以代码为生,至少多多少少都提前了解一点html。说不定实习的第一个任务就是制作某一个debug工具展示在网页上。
会话和Cookies。实际上是网页端认证。如果需要爬取需要登录的页面(比如微博),这个知识是必须要掌握的。
正则表达式。正则表达式是各种编程语言之间通用的一套进行字符串匹配和处理的一套定式。当你需要在一个奇奇怪怪但又有点规律的字符串里提取出你想要的信息的时候,正则表达式是最有用的武器。
Python中的urllib和requests库。常见的与网页交互的方法都在这两个库中维护。
Python中的一些常见的解析库。因为HTML是一种特殊的字符串,所以我们可能不需要那么累构造正则表达式去匹配,用一些通用的解析库就可以把HTML解析出来更方便的拿到元素信息。其中名气比较大的库应该是BeautifulSoup
Python中的数据存储方式。比如你想把爬取下来的数据存储在哪里?txt, csv这样的文件里,当时MySQL数据库里,或者一些KV存储的架构比如MongoDB或者Redis?
本书都对上述这些基础的概念做了简单的介绍。还有各种爬虫场景和可能遇到的问题:
不需要登陆的页面爬取。(这个应该是最简单的爬虫项目了)
Ajax数据爬取。现在越来越多的网页出于效率的考虑,都是Ajax异步加载数据,这样可以提高用户体验,但对爬虫来说需要额外处理一下。
动态渲染页面爬取。有时候不能直接在网页源代码上看到真正的HTML,这些HTML可能是访问的时刻通过JavaScript渲染的。不过这个时候就可以通过模拟浏览器登录来进行操作。最近帮理波特写的一个爬虫就是通过这种方式实现的。
如何识别验证码。虽说验证码的出现就是为了防止爬虫抓取的,但当然也是有办法破解的。
代理的使用。当我们需要大批量的高频率的爬取信息的时候,有时候会被一些有反爬虫机制的网站封掉IP,这时候我们就需要把我们伪装成一个新的IP来进行继续爬虫操作,这时候就需要代理来维护和管理自己的可用IP。
模拟登录。当我们爬取一些需要登录才能看到的信息的时候,就必须先模拟登录,才能进行进一步的爬虫操作。
App的爬取。上述的都是网页端的爬虫任务,但是现在越来越多的信息都只能在手机上看到,这种信息可不可以爬虫获取呢?本书对于这一部分也是有比较详细的介绍和案例,甚至还有朋友圈的爬取。事实上这块我目前也不是很熟悉,这也是我下一步要学习的地方。
难能可贵的时候,每次介绍新的概念和场景的时候,除了介绍概念,作者都是附上实际操作的源码。照着做可以很快的上手。
最后还有两个经典的爬虫框架,pyspider和scrapy,这两个框架在进行大批量的爬取可能会比较有帮助。现在我对这两个框架也没有研究过,还需要进一步的学习。比如scrapy在分布式场景下的部署和应用,本书都是有所涉及的。
?话不多说,直接来展示:
第1章 开发环境配置
1.1 Python 3的安装
1.1.1 Windows下的安装
1.1.2 Linux下的安装
1.1.3 Mac下的安装
1.2 请求库的安装
1.2.1 requests的安装
1.2.2 Selenium的安装
1.2.3 ChromeDriver的安装
1.2.4 GeckoDriver的安装
1.2.5 PhantomJS的安装
1.2.6 aiohttp的安装
1.3 解析库的安装
1.3.1 lxml的安装
1.3.2 Beautiful Soup的安装
1.3.3 pyquery的安装
1.3.4 tesserocr的安装
1.4 数据库的安装
1.4.1 MySQL的安装
1.4.2 MongoDB的安装
1.4.3 Redis的安装
1.5 存储库的安装
1.5.1 PyMySQL的安装
1.5.2 PyMongo的安装
1.5.3 redis-py的安装
1.5.4 RedisDump的安装
1.6 Web库的安装
1.6.1 Flask的安装
1.6.2 Tornado的安装
......
第2章 爬虫基础
2.1 HTTP基本原理
2.1.1 URI和URL
2.1.2 超文本
2.1.3 HTTP和HTTPS
2.1.4 HTTP请求过程
2.1.5 请求
2.1.6 响应
2.2 网页基础
2.2.1 网页的组成
2.2.2 网页的结构
2.2.3 节点树及节点间的关系
2.2.4 选择器
2.3 爬虫的基本原理
2.3.1 爬虫概述
2.3.2 能抓怎样的数据
2.3.3 JavaScript渲染页面
2.4 会话和Cookies
2.4.1 静态网页和动态网页
2.4.2 无状态HTTP
2.4.3 常见误区
2.5 代理的基本原理
2.5.1 基本原理
2.5.2 代理的作用
2.5.3 爬虫代理
2.5.4 代理分类
2.5.5 常见代理设置
第3章 基本库的使用
3.1 使用urllib
3.1.1 发送请求
3.1.2 处理异常
3.1.3 解析链接
3.1.4 分析Robots协议
3.2 使用requests
3.2.1 基本用法
3.2.2 高级用法
3.3 正则表达式
3.4 抓取猫眼电影排行
第4章 解析库的使用
4.1 使用XPath
4.2 使用Beautiful Soup
4.3 使用pyquery
第5章 数据存储
5.1 文件存储
5.1.1 TXT文本存储
5.1.2 JSON文件存储
5.1.3 CSV文件存储
5.2 关系型数据库存储
5.2.1 MySQL的存储
5.3 非关系型数据库存储
5.3.1 MongoDB存储
5.3.2 Redis存储
?第6章 Ajax数据爬取
6.1 什么是Ajax
6.2 Ajax分析方法
6.3 Ajax结果提取
6.4 分析Ajax爬取今日头条街拍美图
第7章 动态渲染页面爬取
7.1 Selenium的使用 ???????
7.2 Splash的使用
7.3 Splash负载均衡配置
7.4 使用Selenium爬取淘宝商品
第8章 验证码的识别
8.1 图形验证码的识别
8.2 极验滑动验证码的识别
8.3 点触验证码的识别
8.4 微博宫格验证码的识别
第9章 代理的使用
?9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL拨号代理
9.5 使用代理爬取微信公众号文章
第10章 模拟登录
10.1 模拟登录并爬取GitHub
10.2 Cookies池的搭建
第11章 App的爬取
11.1 Charles的使用
11.2 mitmproxy的使用
11.3 mitmdump爬取“得到”App电子书
信息
11.4 Appium的基本使用
11.5 Appium爬取微信朋友圈
11.6 Appium+mitmdump爬取京东商品
第12章 pyspider框架的使用
12.1 pyspider框架介绍
12.2 pyspider的基本使用
12.3 pyspider用法详解
第13章 Scrapy框架的使用
13.1 Scrapy框架介绍
13.2 Scrapy入门
13.3 Selector的用法
13.4 Spider的用法
13.5 Downloader Middleware的用法
13.6 Spider Middleware的用法
13.7 Item Pipeline的用法
13.8 Scrapy对接Selenium
13.9 Scrapy对接Splash
13.10 Scrapy通用爬虫
13.11 Scrapyrt的使用
13.12 Scrapy对接Docker
13.13 Scrapy爬取新浪微博
第14章 分布式爬虫?
14.1 分布式爬虫原理
14.2 Scrapy-Redis源码解析
14.3 Scrapy分布式实现
14.4 Bloom Filter的对接
第15章 分布式爬虫的部署
15.1 Scrapyd分布式部署
15.2 Scrapyd-Client的使用
15.3 Scrapyd对接Docker
15.4 Scrapyd批量部署
15.5 Gerapy分布式管理