小白如何学习Python爬虫?

104 篇文章 1 订阅
97 篇文章 0 订阅

前言

想要学好爬虫没那么简单,首先知识点方面就涉及到了:计算机网络、编程基础、前端开发、后端开发、APP开发与逆向、网络安全、数据库、运维、机器学习、数据分析等各个方向的内容。

就像一张大网把现在一些主流的技术栈都连接到了一起,因为涵盖的方向多,所以学起来也比较零散,很多初学者搞不懂要学习什么知识,学习过程中遇到反爬也不知道该用什么方法来解决,今天黑马程序员给大家做一些归纳和总结。

一、初学爬虫

一些普通的网站基本都没有什么反爬措施,比如某个博客站点,我们爬全站的话就顺着列表页爬到文章,再把文章的时间、作者、正文等信息爬下来就可以了。

在这里插入图片描述

那么,开始爬虫的时候,我们要学什么呢?

  • 1. Python基础语法学习(基础知识)
    首先,你需要熟悉Python的基本语法,包括变量、数据类型、条件语句、循环、函数等。
  • 2. 对HTML页面的内容抓取(数据抓取)
    如HTTP协议、URL、请求方法(GET、POST等)和响应状态码(如200,404等)。
  • 3. 对HTML页面的数据提取(数据提取)
    爬虫通常需要从HTML中提取信息,因此你需要了解HTML标签、属性和CSS选择器。
  • 4. Scrapy框架以及scrapy-redis分布式策略(第三方框架)
    requests:一个用于发送HTTP请求的库,它可以帮助你获取网页的HTML内容
    BeautifulSoup:一个用于解析HTML和XML的库,它可以帮助你在HTML文档中定位和提取信息。
    lxml:一个解析HTML和XML的高性能库,可以作为BeautifulSoup的替代品。
    Scrapy:一个强大的爬虫框架,用于构建和管理复杂的爬虫项目
  • 6. 爬虫(Spider)、反爬虫(Anti-Spider)、反反爬虫(Anti-Anti-Spider)之间的斗争…
    熟悉常见的反爬虫策略,如User-Agent伪装、IP代理、使用Selenium处理JavaScript等。
  • 7.学习数据存储
    学习如何将爬取的数据存储到文件(如CSV、JSON)或数据库(如MySQL、MongoDB)中。

那代码应该怎么写呢?用Python的request等库就可以了,写一个基本的逻辑,顺着把一篇文章的源码获取下来**,解析的话用XPath、BeautifulSoup、PyQuery 或者正则表达式**,或者粗暴的字符串匹配把想要的内容抠出来,再加个文本写入存下来就完事了。

代码也不难,用几个方法调用,逻辑也非常简单,几个循环家存储。最后就能看到一篇篇的文章保存到我们的电脑了。其实,懒得写代码也无所谓,因为利用基本的可视化爬虫工具,比如八爪鱼这种采集器,通过可视化点选的方式把数据爬下来。

存储方面稍微扩展一下的话,可以对接上MySQL、MongoDB、Elasticsearch、Kafka 等等来保存数据,实现持久化存储。以后查询或者操作会更方便。

不管效率怎么样,这样的路径下来,一个完全没有反爬的网站用最基本的方式就搞定了。

但是到这里,我们就会爬虫了吗?不,还差的很远!

二、Ajax、动态渲染

随着互联网的发展,前端技术也在不断变化,数据的加载方式也不再是单纯的服务端渲染了。我们可以看到很多网站的数据可能都是通过接口的形式传输的,或者即使不是接口那也是一些JSON的数据,然后经过JavaScript渲染得出来的。

这时候,我们再用request来爬那就不顶用了,因为requests爬下来的源码是服务端渲染得到的,浏览器看到页面的和requests获取的结果也是不一样的。真正的数据是经过 JavaScript执行的出来的,数据来源可能是Ajax,也可能是页面的某些Data,也可能是一些ifame页面等等。不过大多数情况下可能是Ajax接口获取的。

所以很多情况下需要分析Ajax,知道这些接口的调用方式之后再用程序来模拟。但是有些接口带着加密参数,比如token、sign等等,又不好模拟,那怎么办呢?

一种方法就是去分析网站的JavaScript逻辑,看里面的代码,就出来这些参数是怎么构造的,找出思路来了之后再用爬虫模拟或者重写就行了。如果你解出来了,那么直接模拟的方式效率会高出来非常多,这里面就需要一些JavaScript基础了,当然有些网站的加密逻辑做的太牛了,你可能花一周也解不出来,最后放弃了。

那这样解不出来怎么办呢?

这时候有一种简单粗暴的方法就是直接用模拟浏览器的方式来爬取,比如Puppeteer、Pyppeteer、Selenium、Splash 等,这样爬取到的源代码就是真正的网页代码,数据自然就好提取了,同时也就绕过分析 Ajax 和一些 JavaScript 逻辑的过程。这种方式就做到了可见即可爬,难度也不大,同时模拟了浏览器,也不太会有一些法律方面的问题。

但其实后面的这种方法也会遇到各种反爬的情况,现在很多网站都会去识别 webdriver,看到你是用的 Selenium 等工具,直接干掉或不返回数据,所以你碰到这种网站还得来专门解一下这个问题。

三、多进程、多线程、协程

上面的情况如果用单线程爬虫模拟是相对简单的,但是有个问题就是速度慢啊。

爬虫是IO密集型的任务,所以可能大多数情况下都在等待网络的响应,如果网络响应速度慢,那就得一直等着。但是这个空余的时间可以让CPU去做更多事情。那怎么办呢?多开店线程吧。

所以这时候我们就可以在某些场景下加上多进程、多线程,虽然说多线程有GIL锁,但是对于爬虫来说其实影响没有那么大,所以用上多进程、多线程都可以成倍的提高爬取速度,对应的库就有 threading、multiprocessing 了。

异步协程就更牛了,用 aiohttp、gevent、tornado 等等的基本上你想搞多少并发就搞多少并发,但是还是悠着点,别把人家网站搞挂了。

总之,用上这几个,爬虫速度就提上来了。

但速度提上来了不一定是好事,反爬接着肯定就要来了,封你 IP、封你账号、弹验证码、返回假数据,所以有时候龟速爬似乎也是个解决办法?

四、分布式

多线程、多进程、协程都能加速,但终究还是单机的爬虫。要真正做到规模化,还得来靠分布式爬虫来搞。

分布式的核心是什么?资源共享。比如爬取队列共享、去重指纹共享等等。

我们可以使用一些基础的队列或组件来实现分布式,比如 RabbitMQ、Celery、Kafka、Redis 等等,但经过很多人的尝试,自己去实现一个分布式爬虫,性能和扩展性总会出现一些问题,当然特别牛逼的除外哈。不少企业内部其实也有自己开发的一套分布式爬虫,和业务更紧密,这种当然是最好了。

现在主流的 Python 分布式爬虫还是基于 Scrapy 的,对接 Scrapy-Redis、Scrapy-Redis-BloomFilter 或者用 Scrapy-Cluster 等等,他们都是基于 Redis 来共享爬取队列的,总会多多少少遇到一些内存的问题。所以一些人也考虑对接到了其他的消息队列上面,比如 RabbitMQ、Kafka 等等,解决一些问题,效率也不差。

总之,要提高爬取效率,分布式还是必须要掌握的。

四、验证码

爬虫难免遇到反爬,验证码就是其中之一。要会反爬,那首先就要会解验证码。

现在你可以看到很多网站都会有各种各样的验证码了,比如最简单的图形验证码,要是验证码的文字规整的话,OCR 过一遍或者基本的模型库都能识别,不想搞这个的话可以直接去对接个打码平台来搞,准确率还是有的。

然而你可能现在都见不到什么图形验证码了,都是一些行为验证码,如某验、某盾等等,国外也有很多,比如 reCaptcha 等等。一些稍微简单一点的,比如滑动的,你可以找点办法识别缺口,比如图像处理比对、深度学习识别都是可以的。轨迹呢自己写个模拟正常人行为的,加点抖动之类的。有了轨迹之后咋模拟呢,如果你牛逼,那么可以直接去分析验证码的 JavaScript 逻辑,把轨迹数据录入,那就能得到里面的一些加密参数,直接拿着这些参数放到表单或接口里面就能直接用了。当然也可以用模拟浏览器的方式来拖动,也能通过一定的方式拿到加密参数,或者直接用模拟浏览器的方式把登录一起做了,拿着 Cookies 来爬也行。

当然拖动只是一种验证码,还有文字点选、逻辑推理等,要是真不想搞,可以找打码平台来解出来再模拟,但毕竟花钱的,一些高手就会选择自己训练深度学习相关的模型,收集数据、标注、训练,针对不同的业务训练不同的模型。这样有了核心技术,也不用再去花钱找打码平台了,再研究下验证码的逻辑模拟一下,加密参数就能解出来了。不过有的验证码难得很,有的我也没搞定。

当然有些验证码可能是请求过于频繁而弹出来的,这种如果换个 IP 什么的也能解。

五、封IP

封 IP 也是个令人头疼的事,行之有效的方法就是换代理了。

代理很多种,市面上免费的,收费的太多太多了。

首先可以把市面上免费的代理用起来,自己搭建一个代理池,收集现在全网所有的免费代理,然后加一个测试器一直不断测试,测试的网址可以改成你要爬的网址。这样测试通过的一般都能直接拿来爬你的目标网站。我自己也搭建过一个代理池,现在对接了一些免费代理,定时爬、定时测,还写了个 API 来取,放在 GitHub 了:,打好了 Docker 镜像,提供了 Kubernetes 脚本,大家可以直接拿来用。

付费代理也是一样,很多商家提供了代理提取接口,请求一下就能获取几十几百个代理,我们可以同样把它们接入到代理池里面。但这个代理也分各种套餐,什么开放代理、独享代理等等的质量和被封的几率也是不一样的。

有的商家还利用隧道技术搭了代理,这样代理的地址和端口我们是不知道的,代理池是由他们来维护的,比如某布云,这样用起来更省心一些,但是可控性就差一些。

还有更稳定的代理,比如拨号代理、蜂窝代理等等,接入成本会高一些,但是一定程度上也能解决一些封 IP 的问题。

不过这些背后也不简单,为啥一个好好的高匿代理就是莫名其妙爬不了,背后的一些事就不多讲了。

封账号

有些信息需要模拟登录才能爬嘛,如果爬的过快,人家网站直接把你的账号封禁了,就啥都没得说了。比如爬公众号的,人家把你 WX 号封了,那就全完了。

一种解决方法当然就是放慢频率,控制下节奏。

还有种方法就是看看别的终端,比如手机页、App 页、wap 页,看看有没有能绕过登录的法子。

另外比较好的方法,那就是分流。如果你号足够多,建一个池子,比如 Cookies 池、Token 池、Sign 池反正不管什么池吧,多个账号跑出来的 Cookies、Token 都放到这个池子里面,用的时候随机从里面拿一个。如果你想保证爬取效率不变,那么 100 个账号相比 20 个账号,对于每个账号对应的 Cookies、Token 的取用频率就变成原来的了 1/5,那么被封的概率也就随之降低了。

六、反爬

上面说的是几种比较主流的反爬,还有非常多的奇葩的反爬。比如返回假数据、返回图片化数据、返回乱序数据、返回…各种数据。

七、JavaScript 逆向

说到重头了。随着前端技术的进步和网站反爬意识的增强,很多网站选择在前端上下功夫,那就是在前端对一些逻辑或代码进行加密或混淆。当然这不仅仅是为了保护前端的代码不被轻易盗取,更重要的是反爬。比如很多 Ajax 接口都会带着一些参数,比如 sign、token 等等,这些前文也讲过了。这种数据我们可以用前文所说的 Selenium 等方式来爬,但总归来说效率太低了,毕竟它模拟的是网页渲染的整个过程,而真实的数据可能仅仅就藏在一个小接口里。

如果我们能够把一些接口的参数真正找出其中的逻辑,用代码来模拟执行,那效率就会有成倍的提升,而且还能在一定程度上规避上述的反爬现象。

但问题是什么?难啊。

Webpack 是一方面,前端代码都被压缩和转码成一些 bundle 文件,一些变量的含义已经丢失,不好还原。然后一些网站再加上一些 obfuscator 的机制,把前端代码变成你完全看不懂的东西,比如字符串拆散打乱、变量十六进制化、控制流扁平化、无限 debug、控制台禁用等等,前端的代码和逻辑已经面目全非。有的用 WebAssembly 等技术把前端核心逻辑直接编译,那就只能慢慢抠了,虽然说有些有一定的技巧,但是总归来说还是会花费很多时间。但一旦解出来了,那就万事大吉了。怎么说?就像奥赛题一样,解出来升天,解不出来 GG。

很多公司招聘爬虫工程师都会问有没有 JavaScript 逆向基础,破解过哪些网站,比如某宝、某多、某条等等,解出来某个他们需要的可能就直接录用你。每家网站的逻辑都不一样,难度也不一样。

总结

另外还有…关于APP、智能化、运维相关的内容我们就不展开说了。

至此,爬虫涵盖的一些知识点也就差不多了,梳理一下计算机网络、编程基础、前端开发、后端开发、App 开发与逆向、网络安全、数据库、运维、机器学习都涵盖到了。

-END-


一、Python入门

下面这些内容是Python各个应用方向都必备的基础知识,想做爬虫、数据分析或者人工智能,都得先学会他们。任何高大上的东西,都是建立在原始的基础之上。打好基础,未来的路会走得更稳重。所有资料文末免费领取!!!

包含:

计算机基础

在这里插入图片描述

python基础

在这里插入图片描述

Python入门视频600集:

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

二、Python爬虫

爬虫作为一个热门的方向,不管是在自己兼职还是当成辅助技能提高工作效率,都是很不错的选择。

通过爬虫技术可以将相关的内容收集起来,分析删选后得到我们真正需要的信息。

这个信息收集分析整合的工作,可应用的范畴非常的广泛,无论是生活服务、出行旅行、金融投资、各类制造业的产品市场需求等等,都能够借助爬虫技术获取更精准有效的信息加以利用。

在这里插入图片描述

Python爬虫视频资料

在这里插入图片描述

三、数据分析

清华大学经管学院发布的《中国经济的数字化转型:人才与就业》报告显示,2025年,数据分析人才缺口预计将达230万。

这么大的人才缺口,数据分析俨然是一片广阔的蓝海!起薪10K真的是家常便饭。

在这里插入图片描述

四、数据库与ETL数仓

企业需要定期将冷数据从业务数据库中转移出来存储到一个专门存放历史数据的仓库里面,各部门可以根据自身业务特性对外提供统一的数据服务,这个仓库就是数据仓库。

传统的数据仓库集成处理架构是ETL,利用ETL平台的能力,E=从源数据库抽取数据,L=将数据清洗(不符合规则的数据)、转化(对表按照业务需求进行不同维度、不同颗粒度、不同业务规则计算进行统计),T=将加工好的表以增量、全量、不同时间加载到数据仓库。

在这里插入图片描述

五、机器学习

机器学习就是对计算机一部分数据进行学习,然后对另外一些数据进行预测与判断。

机器学习的核心是“使用算法解析数据,从中学习,然后对新数据做出决定或预测”。也就是说计算机利用以获取的数据得出某一模型,然后利用此模型进行预测的一种方法,这个过程跟人的学习过程有些类似,比如人获取一定的经验,可以对新问题进行预测。

在这里插入图片描述

机器学习资料:

在这里插入图片描述

六、Python高级进阶

从基础的语法内容,到非常多深入的进阶知识点,了解编程语言设计,学完这里基本就了解了python入门到进阶的所有的知识点。

在这里插入图片描述

到这就基本就可以达到企业的用人要求了,如果大家还不知道去去哪找面试资料和简历模板,我这里也为大家整理了一份,真的可以说是保姆及的系统学习路线了。

在这里插入图片描述
但学习编程并不是一蹴而就,而是需要长期的坚持和训练。整理这份学习路线,是希望和大家共同进步,我自己也能去回顾一些技术点。不管是编程新手,还是需要进阶的有一定经验的程序员,我相信都可以从中有所收获。

一蹴而就,而是需要长期的坚持和训练。整理这份学习路线,是希望和大家共同进步,我自己也能去回顾一些技术点。不管是编程新手,还是需要进阶的有一定经验的程序员,我相信都可以从中有所收获。

资料领取

上述这份完整版的Python全套学习资料已经上传网盘,朋友们如果需要可以微信扫描下方二维码输入“领取资料” 即可自动领取
或者

点此链接】领取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值