很多人学习python编程语言之后,不知道爬虫是什么,相信大家对“爬虫”这个词并不陌生,在不了解爬虫的人群中,就会觉得这是个很高端神秘的技术。
如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,
沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序;
从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。
模拟用户在浏览器或者App应用上的操作,把操作的过程、实现自动化的程序,大致分为以下4个基本流程:
(1)发起请求
通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应。
(2)获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型。
(3)解析内容
得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
(4)保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件。
现在爬虫可以做的事情非常多,数据、信息、电影、资料等,你技术过关了,爱咋爬咋爬,仔细观察,加上你如果认真观察,就会发现学习爬虫的人越来越多,一点是互联网对于信息数据的需求越来越多,第二点是Python这种强大又简单的编程语言容易学习,而且世界上80%的爬虫都是由它来完成的,简单、易上手是它的优势。
爬虫的入门选择Python最好的方法,因为Python有很多应用的方向,如后台开发、web开发、科学计算等等,但爬虫对于初学者而言更友好,原理简单,几行代码就能实现基本的爬虫,学习的过程更加平滑,你能体会更大的成就感。
掌握基本的爬虫后,你再去学习Python数据分析、web开发甚至机器学习,都会更得心应手。因为这个过程中,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在分布式场景下的部署和应用,本书都是有所涉及的。
如果有需要python学习资料的,可以扫描这里!
话不多说,直接来展示:
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示。如有需要获取完整的资料文档的朋友点赞+评论《python3网络爬虫开发实战》,即可免费获取。