【python爬虫】如何开始写爬虫?来给你一条清晰的学习路线吧~

记录一下我自己从零开始写python爬虫的心得吧!

我刚开始对爬虫不是很了解,又没有任何的计算机、编程基础,确实有点懵逼。从哪里开始,哪些是最开始应该学的,哪些应该等到有一定基础之后再学,也没个清晰的概念。

因为是 Python 爬虫嘛,Python 就是必备的咯,那先从 Python 开始吧。于是看了一些教程和书籍,了解基本的数据结构,然后是列表、字典、元组,各种函数和控制语句(条件语句、循环语句)。

在这里插入图片描述
学习一门学科的时候是要清楚它的知识框架才能清晰的学习、有系统的学习,下面来列一列python网络爬虫的知识框架来帮助大家能够有效的学习和掌握,避免不必要的坑。

学了一段时间,才发现自己还没接触到真正的爬虫呢,而且纯理论学习很快就忘了,回去复习又太浪费时间,简直不要太绝望。把 Python 的基础知识过了一遍之后,我竟然还没装一个可以敲代码的IDE,想想就哭笑不得。

零基础学习爬虫,坑确实比较多,总结如下:

1.环境配置,各种安装包、环境变量,对小白太不友好;

2.缺少合理的学习路径,上来 Python、HTML 各种学,极其容易放弃;

3.Python有很多包、框架可以选择,但小白不知道哪个更友好;

4.遇到问题甚至不知道如何描述,更不用说去寻找解决办法;

5.网上的资料非常零散,而且对小白不友好,很多看起来云里雾里;

6.有些东西看似懂了,但结果自己写代码还是很困难;

……………………

所以跟我一样,很多人爬坑最大的体会是:尽量不要系统地去啃一些东西,找一个实际的项目(从豆瓣这种简单的入手),直接开始就好。

因为爬虫这种技术,既不需要你系统地精通一门语言,也不需要多么高深的数据库技术,从实际的项目中去学习这些零散的知识点,你能保证每次学到的都是最需要的那部分。

当然麻烦的是,在具体的问题中,如何找到具体需要的那部分学习资源、如何筛选和甄别,遇到困难时如何有效解决,是很多初学者面临的大问题。

python网络爬虫总的来说有五个大的方面:

前端知识——基础爬虫——框架爬虫——分布式爬虫——突破反爬虫

1.前端知识

“网络爬虫”很明显对象是网络,也就是网页。说到网页,这里就涉及到了前端的知识了,不过大家也不要慌,只要懂点必要的HTML5框架、网页的http请求、还有JavaScript、css3的知识就可以了,以这样的水平也是可以学会爬虫的啦。当然,如果要非常精通python网络爬虫的话,深入学习前端知识是必要的。

2.基础爬虫

(1)基础库:urllib模块/requests第三方模块

首先爬虫就是要从网页上把我们需要的信息抓取下来的,那么我们就要学习urllib/requests模块,这两种模块是负责爬取网页的。这里大家觉得哪一种用的习惯就用哪一种,选择一种精通就好了。我推荐读者使用使用requests模块,因为这一种简便很多,容易操作、容易理解,所以requests被称为“人性化模块”。

(2)多进程、多线程、协程和分布式进程:

为什么要学这四个知识呢?假如你要爬取200万条的数据,使用一般的单进程或者单线程的话,你爬取下载这些数据,也许要一个星期或是更久。试问这是你想要看到的结果吗?显然单进程和单线程不要满足我们追求的高效率,太浪费时间了。只要设置好多进程和多线程,爬取数据的速度可以提高10倍甚至更高的效率。

(3)网页解析提取库:xpath/BeautifulSoup4/正则表达式

通过前面的(1)和(2)爬取下来的是网页源代码,这里有很多并不是我们想要的信息,所以需要将没用的信息过滤掉,留下对我们有价值的信息。这里有三种解析器,三种在不同的场景各有特色也各有不足,总的来说,学会这三种灵活运用会很方便的。推荐理解能力不是很强的朋友或是刚入门爬虫的朋友,学习BeautifulSoup4是很容易掌握并能够快速应用实战的,功能也非常强大。

(4)反屏蔽:请求头/代理服务器/cookie

在爬取网页的时候有时会失败,因为别人网站设置了反爬虫措施了,这个时候就需要我们去伪装自己的行为,让对方网站察觉不到我们就是爬虫方。请求头设置,主要是模拟成浏览器的行为;IP被屏蔽了,就需要使用代理服务器来破解;而cookie是模拟成登录的行为进入网站。

(5)异常:超时处理/异常处理,这里不做介绍了,自己去了解一下。

(6)数据储存库:文件系统储存/MySQL/MongoDB

数据的储存大概就这三种方式了,文件系统储存是运用了python文件操作来执行的;而MySQL要使用到数据库创建表格来储存数据;MongoDB在爬虫里是非常好的储存方式,分布式爬虫就是运用了MongoDB来储存的。各有特色,看自己需要哪种,再灵活运用。

(7)动态网页抓取:Ajax/PhantomJS/Selenium这三个知识点

(8)抓包:APP抓包/API爬虫

(9)模拟登陆的 爬虫

3.框架爬虫

主流且热门的 scrapy 框架/人性化的 pyspider 框架

框架不止这两种,但是很多时候就只用到了这些框架,所以把这两种掌握熟悉了就可以了。

4.分布式爬虫

python 操作 Redis 基础命令和 scrapy-Redis

5.突破反爬虫

useragent 池/禁用 cookies /设置下载延时和自动限速/代理 IP 池/ tor 代理/分布式下载器

对于零基础如何开始能写爬虫,以下几点希望你看了能解答你的困惑。

01 并没想象的那么容易

因为自己本身对python了解的也不是很多,于是马上着手开始学习python,但是在没人指导的情况下确实很迷茫(mb)。

通过网上查的一些资料,以及参考别人的学习过程,于是看了一些书籍,了解数据结构,然后是列、表、字典、函数、控制语句等(常用的条件语句、循环语句)。

学了一段时间后,回过头来看,其实自己并没接触到真正的爬虫,而且学习纯理论的东西长时间不用就会忘记,只能回头继续复习,确实很浪费时间。

02 直接上手阶段

之前在csdn逛gai的时候看到别的大牛分享的技术贴,清晰的思路一看就懂,这才是我应该学习的爬虫。于是决定自己先搭建一个环境试试,看看能玩成什么样子。

因为怕出错,装了比较保险的 Anaconda,用自带的 Jupyter Notebook 作为IDE来写代码。看到很多人说因为配置环境出各种BUG,简直庆幸。很多时候打败你的,并不是事情本身,说的就是爬虫配置环境这事儿。

遇到的另一个问题是,Python 的爬虫可以用很多包或者框架来实现,应该选哪一种呢?我的原则就是是简单好用,写的代码少,对于一个小白来说,性能、效率什么的,统统被我 pass 了。于是开始接触 urllib、美丽汤(BeautifulSoup),因为听别人说很简单。

我上手的第一个案例是爬取豆瓣的电影,照着一些爬取豆瓣电影的入门级例子开始看,从这些例子里面,了解了一点点爬虫的基本原理:下载页面、解析页面、定位并抽取数据。

代码就不展示了,最终通过别人的思路和自己查找美丽汤的用法,完成了豆瓣电影的基本信息爬取。

03 走上正轨

有了第一步的实践,就需要继续往下学习、尝试,比如爬取多个元素、翻页、处理多种情况等涉及的语句控制,又比如提取内容时涉及到的字符串、列表、字典的处理,还远远不够。

再回去补充 Python 的基础知识,就很有针对性,而且能马上能用于解决问题,也就理解得更深刻。

BeautifulSoup 还算不错,但需要花一些时间去了解一些网页的基本知识,否则一些元素的定位和选取还是会头疼。

后来认识到 xpath 之后相见恨晚,这才是入门必备利器啊,直接Chrome复制就可以了,指哪打哪。即便是要自己写 xpath,以w3school上几页的 xpath 教程,一个小时也可以搞定了。requests 貌似也比 urllib 更好用,但摸索总归是试错的过程,试错成本就是时间。

04 反爬是道坎儿

在爬取一些网站的时候,可能是涉及到了敏感信息,发现很多内容根本无法爬取,而且IP经常被封禁。简单的可以通过 time.sleep 控制爬取频率的方法解决,限制比较严格或者需要保证爬取速度,就要用代理IP来解决。

后来也试了一下 Selenium,这个就真的是按照真实的用户浏览行为(点击、搜索、翻页)来实现爬虫,所以对于那些反爬虫特别厉害的网站,又没有办法解决。但是Selenium 确实非常好用易上手,虽然速度稍微慢点。

05 初尝Scrapy 框架

使用 requests+xpath 和抓包大法确实可以解决很多网站信息的爬取,但是对于信息量比较大或者需要分模块爬取的话,就会显得寸步难行。

后来应用到了强大的 Scrapy 框架,它不仅能便捷地构建 Request,还有强大的 Selector 能够方便地解析 Response,然而最让人惊喜的还是它超高的性能,可以将爬虫工程化、模块化。

学会 Scrapy,自己去尝试搭建了简单的爬虫框架,在做大规模数据爬取的时候能够结构化、工程化地思考大规模的爬取问题,这使我可以从爬虫工程的维度去思考问题。

再后来开始逐渐接触到分布式爬虫,这个东西听着挺唬人,但其实就是利用多线程的原理让多个爬虫同时工作,能够实现更高的效率。

总结一下我学习python爬虫过程所走过的一些坑

1、缺少合理的学习路径,上来 Python、HTML 各种学,极其容易放弃;

2、网上的资料非常零散,而且对小白不友好,很多看起来云里雾里;

3、没有专业的人知道,会走很多的弯路,自己都不知道要往哪里学。

所以很多爬虫工程师,都会有跟我一样的体会:爬虫这玩意儿不需要多精湛的代码技术,也不需要多深的数据库知识,只要有合理的学习路径以及实操项目,都能学好。

关于Python的技术储备

在这里给大家分享一些免费的课程供大家学习,下面是课程里面的截图,扫描最下方的二维码就能全部领取。

1.Python所有方向的学习路线

在这里插入图片描述

2.学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
在这里插入图片描述

3.学习资料

在这里插入图片描述

4.实战资料

实践是检验真理的唯一标准。这里的压缩包可以让你再闲暇之余帮你提升你的个人能力。
在这里插入图片描述

5.视频课程

在这里插入图片描述

好啦今天的分享就到这里结束了,快乐的时光总是短暂呢,想学习更多课程的小伙伴不要着急,有更多惊喜哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模糊综合评价

第一步:确定评语指标集 评语集 第二步:求出模糊评价矩阵P,往往结合具体数据 通常用频率法确定隶属度 用变异系数法确定权重 前几篇博客有讲变异系数法 移步 模糊合成

【hcie-cloud】【19】云原生详细介绍、华为云Stack中云原生服务简介

文章目录 前言云原生简介云计算和云原生云原生的特征云原生技术架构云原生的定义云原生关键技术 - 容器&不可变基础设施1、 容器2、微服务3、服务网格4、DevOps5、 不可变基础设施6、 声明式API 云原生关键技术 - 申明式API 华为云Stack中云原生服务简介构建以应用为中心的…

Day1Qt

1、实现登录窗口界面 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QIcon>//图标 #include <QLabel>//标签类 #include <QMovie>//动态类 #include <QLineEdit>//行编辑类 #include <QPushButton>…

龙芯+RT-Thread+LVGL实战笔记(29)——电子琴弹奏

【写在前面】临近期末,笔者工作繁忙,因此本系列教程的更新频率有所放缓,还望订阅本专栏的朋友理解,请勿催更。笔者在此也简要声明几点: 有些硬件模块笔者并没有,如LED点阵、压力传感模块、RFID模块等,因此这些模块的相关任务暂时无法给出经过验证的代码。其实,教程进行…

一文带你全面了解什么是自动化测试?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;软件测试面试题分享&#xff1a; 1000道软件测试面试题及答案&#x1f4e2;软件测试实战项目分享&#xff1a; 纯接口项目-完…

打造专属个人或企业知识付费平台,核心功能设计

在当今信息爆炸的时代&#xff0c;知识管理已经成为了每个人必须面对的问题。然而&#xff0c;市面上的知识付费平台大多数都是通用的&#xff0c;无法满足个性化需求。 因此&#xff0c;明理信息科技提供了一款专属定制的适合个人的知识付费平台。核心产品能力如下&#xff1…

js逆向第14例:猿人学第7题动态字体,随风漂移

任务7:采集这5页中胜点列的数据,找出胜点最高的召唤师,将召唤师姓名填入答案中 此题采集的是胜点列表的数据如下 通过控制台审查元素查看,可以看到是乱码,记得几年前的快手,小红书,抖音也采用了此类反爬措施,html页面显示的是乱码,浏览器能正常显示数据,大概率就是…

基于ssm的双减后初小教育课外学习生活活动平台的设计与实现论文

双减后初小教育课外学习生活活动平台的设计与实现 摘 要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。以前学校对于课外学习活动信息的管理和控制&#xff0c;采用人工登记的方式保存相关…

基于海洋捕食者算法优化的Elman神经网络数据预测 - 附代码

基于海洋捕食者算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于海洋捕食者算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于海洋捕食者优化的Elman网络5.测试结果6.参考文献7.Matlab代码…

在Spring Cloud Config Github配置中心

关于Spring Cloud系列我们其实讲解了很多&#xff0c;但是这里我们介绍一下Spring Cloud Config&#xff0c;它是一个解决分布式系统的配置管理方案&#xff0c;他包含了Client 和 Server 两个部分&#xff0c;server提供配置文件的存储&#xff0c;以接口的方式将配置文件内容…

一天一个设计模式---工厂方法

概念 工厂模式是一种创建型设计模式&#xff0c;其主要目标是提供一个统一的接口来创建对象&#xff0c;而不必指定其具体类。工厂模式将对象的实例化过程抽象出来&#xff0c;使得客户端代码不需要知道实际创建的具体类&#xff0c;只需通过工厂接口或方法来获取所需的对象。…

《矩阵分析》笔记

来源&#xff1a;【《矩阵分析》期末速成 主讲人&#xff1a;苑长&#xff08;5小时冲上90&#xff09;】https://www.bilibili.com/video/BV1A24y1p76q?vd_sourcec4e1c57e5b6ca4824f87e74170ffa64d 这学期考矩阵论&#xff0c;使用教材是《矩阵论简明教程》&#xff0c;因为没…

全球企业绿色供应链数据(含CITI指数和CATI指数,2014-2023年)

数据简介&#xff1a;发文趋势与主题分布 数据来源&#xff1a;公众环境研究中心&#xff08;IPE&#xff09; 时间跨度 CITI指数&#xff1a;2014-2023年&#xff1b; CATI指数&#xff1a;2021-2023年 数据范围&#xff1a;品牌型企业&#xff0c;温室气体重点排放行业的上…

某市公共资源交易网

目标网站首页&#xff1a;aHR0cDovL2dnenkuendmd2IudGouZ292LmNu/ 分析页面&#xff1a;aHR0cDovL2dnenkuendmd2IudGouZ292LmNuL3h3engvaW5kZXhfMi5qaHRtbA 点击前URL http://ggzy.zwfwb.tj.gov.cn:80/zwyw/1030977.jhtml 点击后URL http://ggzy.zwfwb.tj.gov.cn/zwyw/PtP89W…

Kettle Local引擎使用记录(二):问题记录及解决方法

Kettle Local &#x1f4da; 前言⁉️问题记录❓问题一&#xff1a;Database type not found!…database type with plugin id [Oracle] couldnt be found!❕原因&#xff1a;没有初始化Kettle环境❗解决&#xff1a;添加监听器&#xff0c;进行Kettle环境初始化 ❓问题二&…

Spring 见解 7 基于注解的AOP控制事务

8.基于注解的AOP控制事务 8.1.拷贝上一章代码 8.2.applicationContext.xml <!-- 开启spring对注解事务的支持 --> <tx:annotation-driven transaction-manager"transactionManager"/> 8.3.service Service Transactional(readOnlytrue,propagation Pr…

需求跟踪矩阵(RTM)是什么

什么是可追溯性矩阵&#xff1f; 可追溯性矩阵是一个文档&#xff0c;它与需要多对多关系以检查关系的完整性的任何两个基线文档相关联。它用于跟踪需求并检查是否满足当前项目需求。 什么是需求追踪矩阵&#xff1f; 需求可追溯性矩阵&#xff08;RTM&#xff09;是一个文档…

自动化软件测试流程的七个步骤和内容

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;软件测试面试题分享&#xff1a; 1000道软件测试面试题及答案&#x1f4e2;软件测试实战项目分享&#xff1a; 纯接口项目-完…

java 创建一个可执行的jar包小程序

第1步&#xff1a;写好代码 public class Main {public static void main(String[] args) {String str "hahah";if (StringUtils.isBlank(str)) {System.out.println(str);}System.out.println("Hello world!");} }第2步&#xff1a;设置 Artifact 选择入…

【netstat】

netstat netstat Proto是协议&#xff0c;TCP、UDP Recv-Q表示网络接收队列 Send-Q表示网络发送队列&#xff0c;没有ack的数据 Local Address本地ip地址和端口 Foreign Address服务器的ip和端口 State连接状态 State的种类&#xff1a; Established-活跃的连接 Listen-等待连…