开个新坑——Python 爬虫系列,最近脑子里有很多非常有趣的想法,但实现起来都需要一些简单的爬虫知识,如果放在趣学 Python 系列,会显得文章太长,干脆拿出来开个新坑。这个系列本质上是为趣学 Python 系列提供数据支撑的,我会尽量从最简单的爬虫开始写,保证零基础一样能看懂。
Python 爬虫已经是烂大街的东西了,几乎每个人在学习 Python 后第一个实战项目就是爬虫,入门门槛低,上手简单,容易产生成就感,与此同时,大规模数据爬取的技术含量又保证了深入学习的必要性,简直是学习技术的最佳对象。今天,我们来实现一个最简单的爬虫,用以爬去各个星座的每日运势。
0x00 基本环境
Python 版本:3.7.1
用到的库:lxml、requests
Pytthon 经常会用到不同的库,有时甚至是不同的版本,如果自己配置包管理工具和虚拟环境非常麻烦,哪怕 pipenv 将二者进行了结合用起来也不是很方便,建议安装 Anaconda,省时省心,用法也简单,各个虚拟环境随时切换,极为方便。
0x01 基础知识
首先介绍下几个基本的概念,方便大家对爬虫如何工作有一个简单的了解。
所谓爬虫,其实就是用程序模拟人来登录站,然后提取我们需要的信息。访问网站是通过 HTTP 协议来实现的,其工作模型如下图:
那么我们需要了解的第一个知识点就是如何通过 Python 来发送请求。在我们的爬虫中,访问网页这部分工作使用 requests 库来实现,通过 requests 库模拟发送请求,然后接收网站的响应,也就是传回的 html 数据。
提取指定节点包含的信息一般有两种方式:正则表达式或 XPath,其中正则表达式比较繁琐,XPath 简单易懂,还可以在 Chrome 中直接复制,因此本文选用 XPath 来定位节点。需要注意的是 XPath 定位的一组符合条件的节点,因此返回一个 list ,其中对应的第 0 个元素一般就是我们需要的。
基础知识介绍完了,下面我们开始进入正题。
0x02 分析网页
首先需要对要爬取的网页进行分析。
我们需要爬取的网址为 http://www.xzw.com/fortune/aries/ ,在浏览器中打开网页,然后在相应元素上右键点击检查,我们就可以在分割窗口中看到该元素的信息了,如下图所示:
然后找到相应节点,右键就可以复制 XPath 了。
需要注意的是,XPath 定位的是某个节点,而我们需要用到的是对应节点的文本,因此需要用到 text 方法。
比如,短评这个 label 的 XPath 为:
在代码中我们可以这么使用:
另外需要注意,有时候我们需要用到节点的属性,比如综合运势为 4 星,这个就是通过节点的 style 属性来体现的。
其中 4 星对应的 em 标签宽度为 64px,可以通过 attrib 获得:
这样返回的是字符串 ,然后可以只保留数字就可以了:
0x03 代码实现
1. 导入需要的库
2. 发送请求
3. 将返回的数据格式化为节点树
4. 提取节点数据
完整代码如下:
领取专属 10元无门槛券
私享最新 技术干货