本文原作者为 ArchiPython 群友,Python 工作者:小男人,与Vctcn93一起合作修订后发布,本文版权为二者共有,授权发布于 ArchiPython 平台。
爬虫是什么
进入大数据时代以来,我想每个人都或多或少的听说过爬虫这个概念,那么爬虫究竟是个什么东西呢?
,是高效的信息采集利器,一种自动在互联网上摘取指定内容的程序或者脚本。
它也被称为网络蜘蛛,如果将互联网比作一张巨大的蜘蛛网,爬虫便是这个网上的蜘蛛,它能在这个网上任意游走,它能在这个网上灵活地捕捉猎物 -- 即数据,所以爬虫在数据行业中,处于十分上游的位置,是 的手段之一,也是许多数据行业的基石,更是大数据时代的程序员必备的基本生存技能之一。
爬虫的工作原理
爬虫其本质,是对人类行为的模拟,所以想要弄清楚爬虫的工作原理,你必须要知道你打开网页时都发生了一些什么。
当我去我最爱的参考消息官网官网查看新闻时:
我将在浏览器输入网址: ,并且按下回车,我便给服务器发送了一条包含着我这台计算机信息的
当服务器收到我的 后,便会把相应的网页数据结构,传回到我的电脑上
我的浏览器会把收到的网页数据结构,排版为常规网页的样子
这也是当你打开网页时,网络与计算机之间发生的故事。
爬虫,便是对这一行为的简单模拟:
它将模仿你发送请求,并且解析收到的数据格式,最后捕捉到你要的信息
人类打开网址,查找信息,原始又低效;一只自动化的爬虫,其获取信息的效率与准确性,是人类的千万倍。这便是越来越多的人都开始饲养起爬虫的原因。
爬虫知识 Plus
虽然爬虫的工作原理很简单,但是对知识储备的要求是十分巨大的,无论是网页的知识、还是通信的知识、甚至于数据结构与处理的知识,你都需要掌握,但这却不是培育爬虫最高的技术门槛。
由于爬虫的效率高、访问频繁、占用资源大、使用人数多,往往会给网络服务器带来巨大的负担,甚至会把不少容量不够的服务器搞到宕机(比如前两日我在练手的时候便把某好友的网站爬到无法访问),所以诸多网站的运维人员,对爬虫都是深恶痛绝的。他们为了防止爬虫,很多网站都有一定的 机制,用以阻挡大量爬虫的侵扰,给爬虫养育者制造各种各样的麻烦。
所以,爬虫的难点并不在爬虫本身,其难点在于如何 、 ,如何拟人得逼真,如何效率最大化。
网站的运营人员与爬虫信息工作者之间,正在打着一场无休止的浩瀚战争,双方都把 当作自己的唯一目的。双方都是迫于对方的压力,以至于在这场战争中,每天都有新的技术出台、新的手段问世,正所谓 ,双方一并构成了互联网动态发展的壮观推进线。
不过,爬虫在某种程度上来说是一种每日游走在刀锋上的灰产 -- 万一爬到了什么不该爬的东西,玩塌了什么不该玩的站,轻则封了你的 IP,重则蹲几年班房。
所以,想要饲养爬虫的各位,且行且珍惜。
你所需要的爬虫知识
高端的爬虫需要海量的经验与技术储备,难以速成。但作为入门的你,仅仅需要掌握以下几个关键的知识点,便可拥有你自己的爬虫:
URL
-- Uniform Resource Locator,统一资源定位符,即口语的网址。
比如参考消息的官网网址 就是一个 URL,你可以通过类似这样的 URL,访问世界上的各个网站。
GET
-- 将请求参数包含在 URL 链接中的请求方式。
比如你在参考消息官网点击 ,就能进入到 的主页;
此时你的 URL 中便包含了你请求的参数 ;
同样,你在下方试图翻页的时候,你的 URL 也会新增加你请求的参数
类似这种把具体请求参数反映在链接中的请求方式,便被称为,所以你修改 URL 中的参数,也能得到不同的结果。
HEADER
,它承载了本次请求发送者 -- 即你的计算机(或浏览器)具体的信息。
只有把 发给服务器,告诉服务器你是谁,你要什么,服务器才能正确的回答你。
你可以在浏览器中按 -> -> 中,查看到自己的请求头信息。爬虫通过请求头,模仿你向服务器发送请求。
那一大段信息,就是你的请求头。
HTML
-- Hyper Text Markup Language,超文本标记语言,是一种用以描述网页的标记语言,也是网页最原始的样子。
它也是一种数据格式,通过不同的 ,让数据处于正确的位置,浏览器做出正确的反应,最终构成一个人类可读的网页。
你可以按 -> ,看到网页本来的面貌 -- > 即网页源码。
爬虫能通过解读网页的原始结构,得到你所需要的数据。
案例设计
由于建筑类网站大多经不起爬(服务器不堪一击),大型网站的反爬手段又过于高超(不适合入门练手),故设计初阶任务为:
爬取太平洋电脑网(https://www.pconline.com.cn/)的厨卫家电类的评测(https://family.pconline.com.cn/cwjd/review/)文章,并保存为 Word 文件
库和工具:
浏览器
-- 用以向网站发送请求
-- 用以解析 HTML
-- 用以写入 Word
request 库安装
lxml 库安装
docx 库安装
基础流程
要完成这样一只爬虫,我们需要完成以下三个基本步骤:
获得文章目录页面下所有文章的链接地址
根据这些链接地址爬取所有文章
将文章导出并保存起来
API 设计时,获取目标 - 执行 - 导出 三步必须相互独立,逻辑清晰,随后,将以上三步用类包装起来并写成代码,则可以完成基础的 :
我们要做的,就是写出一个爬虫类,让它能够通过我们设计的这三个命令(步骤),成功的获得我们需要的文章。
细部解析
如何得到页面下所有文章的链接?
打开相关的测评页面(https://family.pconline.com.cn/cwjd/review/ )
点击任意一个文章标题,都能跳转入该文章的链接 -- 即每一个文章标题处,都藏有文章的真实链接地址
按 进入开发者工具,点击图片中 符号所在位置的工具,它能让你知道你鼠标所处位置的原件,在网页源码的位置
如鼠标在第一篇文章位置时,该文章部分内容会高亮,同时该标签下所有内容,也会在源码区显示(即位置下)
解析标签下的内容,就能得到该文章的链接地址该页面的所有文章,均采用的如此布局,故解析这个页面下所有符合该标签的内容,即可获得该页所有文章链接
如何获得文章的内容?
点击进入一篇文章的页面
使用 F12 工具分析文章的源码找到文章标题( )
与文章内容的标签位置 ( )
读取并将其存入结果中
如何导出文章并保存?
库拥有强大的 word 互动功能,只需要将结果遍历保存即可
这就是实现这只爬虫的基本步骤。
代码实现
新建 文件,并且导入需要使用的工具
如何使用?
技术重点
总结
领取专属 10元无门槛券
私享最新 技术干货