前言
想要学好爬虫没那么简单,首先知识点方面就涉及到了:计算机网络、编程基础、前端开发、后端开发、APP 开发与逆向、网络安全、数据库、运维、机器学习、数据分析等各个方向的内容。
就像一张大网把现在一些主流的技术栈都连接到了一起,因为涵盖的方向多,所以学起来也比较零散,很多初学者搞不懂要学习什么知识,学习过程中遇到反爬也不知道该用什么方法来解决。本文将对 Python 爬虫的学习路径进行归纳和总结。
一、初学爬虫
一些普通的网站基本都没有什么反爬措施,比如某个博客站点,我们爬全站的话就顺着列表页爬到文章,再把文章的时间、作者、正文等信息爬下来就可以了。
那么,开始爬虫的时候,我们要学什么呢?
- Python 基础语法学习(基础知识) 首先,你需要熟悉 Python 的基本语法,包括变量、数据类型、条件语句、循环、函数等。这是编写任何自动化脚本的基石。
- 对 HTML 页面的内容抓取(数据抓取) 如 HTTP 协议、URL、请求方法(GET、POST 等)和响应状态码(如 200,404 等)。理解请求头(Headers)和 Cookie 的作用至关重要。
- 对 HTML 页面的数据提取(数据提取) 爬虫通常需要从 HTML 中提取信息,因此你需要了解 HTML 标签、属性和 CSS 选择器。
- 第三方框架与库
- requests:一个用于发送 HTTP 请求的库,它可以帮助你获取网页的 HTML 内容。
- BeautifulSoup:一个用于解析 HTML 和 XML 的库,它可以帮助你在 HTML 文档中定位和提取信息。
- lxml:一个解析 HTML 和 XML 的高性能库,可以作为 BeautifulSoup 的替代品。
- Scrapy:一个强大的爬虫框架,用于构建和管理复杂的爬虫项目。
- 爬虫与反爬虫的斗争 熟悉常见的反爬虫策略,如 User-Agent 伪装、IP 代理、使用 Selenium 处理 JavaScript 等。
- 学习数据存储 学习如何将爬取的数据存储到文件(如 CSV、JSON)或数据库(如 MySQL、MongoDB)中。
那代码应该怎么写呢?用 Python 的 requests 等库就可以了,写一个基本的逻辑,顺着把一篇文章的源码获取下来,解析的话用 XPath、BeautifulSoup、PyQuery 或者正则表达式,或者粗暴的字符串匹配把想要的内容抠出来,再加个文本写入存下来就完事了。
代码也不难,用几个方法调用,逻辑也非常简单,几个循环加存储。最后就能看到一篇篇的文章保存到我们的电脑了。其实,懒得写代码也无所谓,因为利用基本的可视化爬虫工具,通过可视化点选的方式把数据爬下来。
存储方面稍微扩展一下的话,可以对接上 MySQL、MongoDB、Elasticsearch、Kafka 等等来保存数据,实现持久化存储。以后查询或者操作会更方便。
不管效率怎么样,这样的路径下来,一个完全没有反爬的网站用最基本的方式就搞定了。
但是到这里,我们就会爬虫了吗?不,还差的很远!
二、Ajax 与动态渲染
随着互联网的发展,前端技术也在不断变化,数据的加载方式也不再是单纯的服务端渲染了。我们可以看到很多网站的数据可能都是通过接口的形式传输的,或者即使不是接口那也是一些 JSON 的数据,然后经过 JavaScript 渲染得出来的。
这时候,我们再用 requests 来爬那就不顶用了,因为 requests 爬下来的源码是服务端渲染得到的,浏览器看到页面的和 requests 获取的结果也是不一样的。真正的数据是经过 JavaScript 执行出来的,数据来源可能是 Ajax,也可能是页面的某些 Data,也可能是一些 iframe 页面等等。不过大多数情况下可能是 Ajax 接口获取的。
所以很多情况下需要分析 Ajax,知道这些接口的调用方式之后再用程序来模拟。但是有些接口带着加密参数,比如 token、sign 等等,又不好模拟,那怎么办呢?
一种方法就是去分析网站的 JavaScript 逻辑,看里面的代码,就出来这些参数是怎么构造的,找出思路来了之后再用爬虫模拟或者重写就行了。如果你解出来了,那么直接模拟的方式效率会高出来非常多,这里面就需要一些 JavaScript 基础了,当然有些网站的加密逻辑做的太牛了,你可能花一周也解不出来,最后放弃了。
那这样解不出来怎么办呢?
这时候有一种简单粗暴的方法就是直接用模拟浏览器的方式来爬取,比如 Puppeteer、Pyppeteer、Selenium、Splash 等,这样爬取到的源代码就是真正的网页代码,数据自然就好提取了,同时也就绕过分析 Ajax 和一些 JavaScript 逻辑的过程。这种方式就做到了可见即可爬,难度也不大,同时模拟了浏览器,也不太会有一些法律方面的问题。
但其实后面的这种方法也会遇到各种反爬的情况,现在很多网站都会去识别 webdriver,看到你是用的 Selenium 等工具,直接干掉或不返回数据,所以你碰到这种网站还得来专门解一下这个问题。


