开个新坑——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. 提取节点数据

完整代码如下:

python运势预测程序_Python 爬虫系列之一——每日星座运势相关推荐

  1. python在线翻译小程序_Python爬虫学习之翻译小程序

    本次博客分享的内容为基于有道在线翻译实现一个实时翻译小程序,本次任务是参考小甲鱼的书<零基础入门学习Python>完成的,书中代码对于当前的有道词典并不适用,使用后无法实现翻译功能,在网上 ...

  2. python壁纸数据抓取_python爬虫系列之 xpath实战:批量下载壁纸

    一.前言 在开始写爬虫之前,我们先了解一下爬虫 首先,我们需要知道爬虫是什么,这里直接引用百度百科的定义网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照 ...

  3. cron定时器_爬虫_获取每日星座运势

    applicationContext_service.xml <?xmlversion="1.0"encoding="UTF-8"?><be ...

  4. python运势预测程序_基于Python的星座运势接口调用代码实例

    [python]代码库#!/usr/bin/python # -*- coding: utf-8 -*- import json, urllib from urllib import urlencod ...

  5. python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)

    python 全栈开发,Day136(爬虫系列之第3章-Selenium模块) 一.Selenium 简介 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直 ...

  6. Python编写每日星座运势获取算法

    Python编写每日星座运势获取算法 获取每日星座运势是许多人关注的一个话题.本文将介绍如何使用Python编写一个获取每日星座运势的程序,并附上完整的源代码. 首先,我们需要导入一些必要的库,包括r ...

  7. python 全栈开发,Day137(爬虫系列之第4章-scrapy框架)

    python 全栈开发,Day137(爬虫系列之第4章-scrapy框架) 一.scrapy框架简介 1. 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所 ...

  8. Python:实现获取daily horoscope每日星座运势算法(附完整源码)

    Python:实现获取daily horoscope每日星座运势算法 import requests from bs4 import BeautifulSoupdef horoscope(zodiac ...

  9. python运势预测程序_星座运势查询示例代码

    #!/usr/bin/python # encoding:utf-8 import urllib2, json, urllib # 2.星座运势查询 data = {} data["appk ...

最新文章

  1. linux vscode配置spring boot开发环境
  2. Vue watch如何同时监听多个属性?
  3. 如何高效学习前端新知识,拓展视野,我推荐
  4. nssl1522-简单数数题【dp】
  5. 【转】二维异形件排版算法介绍(二)
  6. layer.open组件获取弹出层页面变量、函数
  7. leveldb - log格式
  8. dll反编译(dll反编译工具)
  9. java盖章后原来印章模糊了_公章部分字迹盖不清楚怎么处理
  10. Keras-YOLOV3-tensorflow制作训练自己的数据集
  11. 【39】给定一个无重的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复
  12. pc banner图 自适应 图片不变型
  13. Fresher的烦恼(练习打字)
  14. 删除主键索引 oracle,删除主键无法删除对应索引问题 drop constraint
  15. Qt5 QML TreeView currentIndex当前选中项的一些问题
  16. uoj#311 【UNR #2】积劳成疾
  17. 亡羊补牢为时未晚,网络安全从现在做起
  18. JSTree的基本用法
  19. python barrier_[Python 多线程] Barrier (十一)
  20. 例题5.5 圆桌骑士 LA3523

热门文章

  1. nutch源代码阅读心得
  2. 助推曲烟数字化转型升级,开展生产业务数字化
  3. 数据仓库被淘汰了?都怪数据湖
  4. (飞鸽传书绿色版)网站
  5. Facebook今年曾多次升级其安全和隐私控制
  6. 不信不能雷倒你!超牛高考作文
  7. 反向链接推进技巧: 有技巧的“跟风”策略
  8. 不起眼的小动作可能葬送安全措施
  9. 给做IT的一点心理安慰
  10. CString LPCTSTR LPTSTR 类型的相互转化