如何开始写Python爬虫?给入门Python小白一条清晰的学习路线

news2024/11/16 5:52:39

在这里插入图片描述
记录一下我自己从零开始写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开发技术,Python爬虫等技术,这里给大家分享一套系统教学资源,如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

在这里插入图片描述

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)

在这里插入图片描述

👉Python必备开发工具👈

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

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

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

👉100道Python练习题👈

检查学习结果。
在这里插入图片描述

👉面试刷题👈

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

资料领取

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

在这里插入图片描述

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

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

相关文章

Java程序怎么运行?final、static用法小范围类型转大范围数据类型可以吗?

文章目录1.能将int强制转换为byte类型的变量吗?如果该值大于byte类型的范围,将会出现什么现象?2. Java程序是如何执行的?3.final 在 Java 中有什么作用?4.final有哪些用法?5.static都有哪些用法?1.能将int强制转换为…

Rust学习入门--【16】Rust 借用所有权 Borrowing / 引用

系列文章目录 Rust 语言是一种高效、可靠的通用高级语言,效率可以媲美 C / C 。本系列文件记录博主自学Rust的过程。欢迎大家一同学习。 Rust学习入门–【1】引言 Rust学习入门–【2】Rust 开发环境配置 Rust学习入门–【3】Cargo介绍 Rust学习入门–【4】Rust 输…

KubeSphere 社区双周报 | OpenFunction 集成 WasmEdge | 2023.02.03-02.16

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.02.03-2023.…

众德全自动批量剪辑工具,批量去重伪原创视频,全自动合成探店带货等视频

众德全自动批量剪辑工具已连续更新两年,服务了大大小小的自媒体公司工作室共200多个,成就了几百个草根创业者,实现月入10万,自从创办众德传媒之前,我一直坚信自媒体才是年轻草根创业者的出路,不需要技术门槛…

整合K8s+SpringCloudK8s+SpringBoot+gRpc

本文使用K8s当做服务注册与发现、配置管理&#xff0c;使用gRpc用做服务间的远程通讯一、先准备K8s我在本地有个K8s单机二、准备service-providerpom<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.…

2023年PMP考试教材有哪些?(含pmp资料)

PMP考试教材是《PMBOK指南》&#xff0c;但这次的考试因为大纲的更新&#xff0c;而需要另外的敏捷书籍来备考。且官方发了通知&#xff0c;3、5月还是第六版指南&#xff0c;8月及8月之后&#xff0c;使用第七版教材。 新版考纲将专注于以下三个新领域: 人 – 强调与有效领导项…

java设计模式——观察者模式

概述 定义:又被称为发布-订阅(Publish/Subscribe)模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时&#xff0c;会通知所有的观察者对象&#xff0c;使他们能够自动更新自己。 结构 在观察者模式…

数据分析:旅游景点销售门票和消费情况分析

数据分析&#xff1a;旅游景点销售门票和消费情况分析 文章目录数据分析&#xff1a;旅游景点销售门票和消费情况分析一、前言二、数据准备三、分析数据四、用户购买门票数量分析五、用户复购分析六、用户回购分析七、占比分析1.每个月分层用户占比情况。2.每月不同用户的占比3…

网络模型OSI

网络模型OSI定义模型分布数据封装、解封过程数据链路层1.LLC逻辑链路控制子层(Logic Link Control Sub Layer)2.MAC媒介访问控制子层(Medium Acess Control Sub Layer)CSMA/CARST-CST原理OSI定义 OSI&#xff1a;Open Systems Interconnection Reference Model&#xff0c;开放…

2023年前端开发的八大趋势,值得你关注下

随着新年的到来&#xff0c;许多人制定了提高自己和工作的决心。对于前端开发人员而言&#xff0c;跟上最新的潮流趋势是成功的关键。特别是在经济不好的情况下&#xff0c;很多科技专家在最近一个季度内被解雇&#xff0c;这更加强调了这一点。在2023年&#xff0c;有许多令人…

学习 Python 之 Pygame 开发坦克大战(五)

学习 Python 之 Pygame 开发坦克大战&#xff08;五&#xff09;坦克大战完善地图1. 创建砖墙2. 给砖墙增加子弹击中的碰撞效果3. 给砖墙坦克不能通过的碰撞效果坦克大战完善地图 我的素材放到了百度网盘里&#xff0c;里面还有原版坦克大战素材&#xff0c;我都放在一起来&am…

Blazor入门100天 : 身份验证和授权 (2) - 角色/组件/特性/过程逻辑

目录 建立默认带身份验证 Blazor 程序角色/组件/特性/过程逻辑DB 改 Sqlite将自定义字段添加到用户表脚手架拉取IDS文件,本地化资源freesql 生成实体类,freesql 管理ids数据表初始化 Roles,freesql 外键 > 导航属性完善 freesql 和 bb 特性 本节源码 https://github.com/…

Flink03: 集群安装部署

Flink支持多种安装部署方式 StandaloneON YARNMesos、Kubernetes、AWS… 这些安装方式我们主要讲一下standalone和on yarn。 如果是一个独立环境的话&#xff0c;可能会用到standalone集群模式。 在生产环境下一般还是用on yarn 这种模式比较多&#xff0c;因为这样可以综合利…

C++入门:引用

目录 一. 什么是引用 1.1 引用的概念 1.2 引用的定义 二. 引用的性质和用途 2.1 引用的三大主要性质 2.2 引用的主要应用 三. 引用的效率测试 3.1 传值调用和传引用调用的效率对比 3.2 值返回和引用返回的效率对比 四. 常引用 4.1 权限放大和权限缩小问题 4.2 跨…

【超好用】自定义的mybatis-plus代码生成器

BACKGROUND你是否也有这样的烦恼&#xff1a;每次写代码都需要创建很多包很多层很多类很多接口&#xff1f;耗时且费力姑且不谈&#xff0c;有时可能还大意了没有闪&#xff0c;搞出一堆bug这谁顶得住啊都3202年了&#xff0c;让程序自力更生吧&#xff01;&#xff01;教程 le…

原创|关于一次产品需求程序设计及优化的经历

文章目录一、流程梳理二、设计梳理三、技术方案3.1、下单接口扩展3.3.1、Request类新增deviceType3.3.2、申请单新增字段产品策略(productStrategy)3.3.3、下单产品策略的处理逻辑3.2、询价模块的设计3.2.1、Context设计3.2.2、ProductStrategy类设计3.2.2.1、AbstractProductS…

k8s篇之概念介绍

文章目录时光回溯什么是K8SK8S不是什么一、K8S构成组件控制平面组件&#xff08;Control Plane Components&#xff09;kube-apiserveretcdkube-schedulerkube-controller-managercloud-controller-managerNode 组件kubeletkube-proxy容器运行时&#xff08;Container Runtime&…

Spring Cloud Nacos实战(七)- Nacos之Linux版本安装

Nacos之Linux版本安装 Linux版NacosMySql生产环境配置 ​ 已经给大家讲解过了Nacos生产环境下需要搭建集群配置&#xff0c;那么这里我们预计需要&#xff1a;1个Nginx3个Nacos注册中心1个MySql 具体配置&#xff1a; 在官网上下载NacosLinux版本&#xff1a;https://github…

基于SSM框架的CMS内容管理系统的设计与实现

基于SSM框架的CMS内容管理系统的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目…

并查集(高级数据结构)-蓝桥杯

一、并查集并查集(Disioint Set)&#xff1a;一种非常精巧而实用的数据结构用于处理不相交集合的合并问题。用于处理不相交集合的合并问题。经典应用&#xff1a;连通子图。最小生成树Kruskal算法。最近公共祖先。二、应用场景有n个人&#xff0c;他们属于不同的帮派。 已知这些…