关于爬虫学习的一些小小记录——正则表达式匹配

  • 正则表达式
  • Python的re模块
  • 举个小栗子
  • 小小扩展

前面说了怎么访问一个 url,并读取返回的网页源码。有了源码文件,我们还要学会怎么从文件中查找、提取我们需要的数据。这次我们就简单讲讲怎么从源码文件中提取数据

正则表达式

说起提取数据,我就想到了正则表达式(此处不开花)
那什么是正则表达式?
请看,官方介绍
简单说,匹配字符串的
知道了是什么,再看看怎么学
这里列出可能要用到的匹配字符:

Python的re模块

Python 绝对是个处理数据的好能手,它的标准库中提供了强大的re模块,完整地实现了正则表达式的方法功能。简直天衣无缝,恐怖如斯!
这里是学习教程
同样列举一下可能会用到的方法(以及我理解的用法):

findall(pattern, string[, pos[, endpos]])

findall()方法,字面意思,可以在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。其中,
pattern 匹配的正则表达式
string 待匹配的字符串
pos 可选参数,指定字符串的起始位置,默认为 0
endpos 可选参数,指定字符串的结束位置,默认为字符串的长度

举个小栗子

演示一下从豆瓣上爬取2019版《倚天屠龙记》的演职员信息:
网页地址:https://movie.douban.com/subject/25865815/celebrities

我们先打开网页,右键查看源文件。找到演职员列表部分的源码,分析一下
我们发现,演职员的主要信息都在span标签中,再找我们需要提取的信息周围的特征

比如说,演职员名字信息前后,这是前面的部分

以及后面的部分

而恰好,演职员列表中刚好是49个人,所以我们只需要匹配正则表达式

" class="name">(.*)</a></span>

就可以获取我们需要的演职员姓名信息

代码如下

# 爬虫--爬取豆瓣 2019版 《倚天屠龙记》 全体演职员import re
from urllib import requesturl = 'https://movie.douban.com/subject/25865815/celebrities'response = request.urlopen(url)  # 访问 url
page = response.read().decode()  # 以 utf-8 的格式读取数据
names = re.findall('" class="name">(.*)</a></span>', page)  # 正则表达式匹配print(names)

运行结果:

['蒋家骏 Jeffrey Chiang', '曾舜晞 Joseph Zeng', '陈钰琪 Yukee Chen', '祝绪丹 Xudan Zhu', '张超人 Chaoren Zhang', '林雨申 Shen Lin', '曹曦月 Xiyue Cao', '周海媚 Kathy Chow', '王德顺 Deshun Wang', '李东学 Ethan Li', '宗峰岩 Fengyan Zong', '黑子 Zi Hei', '樊少皇 Siu-Wong Fan', '肖荣生 Rongsheng Xiao ', '陈创 Chuang Chen', '杨明娜 Minna Yang', '陈欣予 Xinyu Chen', '许雅婷 Kabby Hui', '孙安可 Anke Sun', '杨一威 Yiwei Yang', '纪沨 Feng Ji', '李泰延 Taiyan Li', '宁文彤 Wentong Ning', '曾黎 Li Zeng', '金钊 Zhao Jin', '李浩轩 Hao-xuan Li', '阮圣文 Shengwen Ruan', '徐爱珉 Aimin Xu', '李曼铱 Manyi Li', '于波 Bo Yu', '李依晓 Xiaoyi Li', '李解 Jie Li', '李泽宇 Zeyu Li', '郭军 Jun Guo', '贺刚 Gang He', '宫正楠 Zhengnan Gong', '邬靖靖 Jingjing Wu', '韩昊霖 Haolin Han', '芦展翔 Zhanxiang Lu', '沈保平 Baoping Shen', '姜彦希 Yanxi Jiang', '侯瑞祥 Ruixiang Hou', '康嘉泽 Jiaze Kang', '林以政 Yizheng Lin', '谢雨辰 Yuchen Xie', '曲吉 Ji Qu', '欧阳小如 Xiaoru Ouyang', '关展博 Edwin Chin-Pok Kwan', '金庸 Louis Cha']

小小扩展

作为一个心中永远向往着学习的优秀者,当然是不能只满足于爬那么一两个名字信息
毕竟,来都来了,不如把图片也爬一下

我们接着分析源码,找一下图片链接

发现了吗,一下子就找到了关键点,简直不要太容易
明显的,括号里面就是我们需要的图片链接,不防打开看看

当然,链接毕竟不是图片文件。有了图片链接,我们还需要访问链接下载图片

这里介绍urllib库中的urlretrieve()方法,可以访问 url 并把网页源码下载到本地

urlretrieve(url, filename=None, reporthook=None, data=None)

url 指定待访问的网页地址
filename 指定了保存到本地的路径(如果参数未指定,urllib会生成一个临时文件保存数据)
reporthook 一个回调函数,可显示当前的下载进度。
data 指定 post 服务器的数据,返回一个包含两个元素的 (filename, headers) 元组,filename 表示保存到本地的路径,headers 表示服务器的响应头

简单点,再顺便把职位爬一下,过程跟爬名字信息的差不多

下面是扩展后的代码

# 爬虫--爬取豆瓣 2019版 《倚天屠龙记》 全体演职员import re
from urllib import requesturl = 'https://movie.douban.com/subject/25865815/celebrities'response = request.urlopen(url)  # 访问 url
page = response.read().decode()  # 以 utf-8 的格式读取数据names = re.findall('" class="name">(.*)</a></span>', page)  # 正则表达式匹配
roles = re.findall('span class="role" title="(.*)">', page)  # 匹配职位
imgs = re.findall('style="background-image: url\((.*)\)">', page)  # 匹配图片链接i = 0
while i < len(names):role_list = roles[i].split(' ')  # 避免因文件名过长无法建立,只好从这里切短role = role_list[0] + ' (' + role_list[-1]  # 切碎了重新拼一下img_name = r'19版《倚天屠龙记》演职员/' + names[i] + ' ' + role + r'.jpg'img = request.urlretrieve(imgs[i], img_name)i += 1

运行结果

我咧个去!!!
怎么会有 50 个???

重新打开网页

天ya噜!!在我刚刚改代码的时候,他又多了个人

关于爬虫学习的一些小小记录(二)——正则表达式匹配相关推荐

  1. 把爬取信息导出到mysql,关于爬虫学习的一些小小记录(四)——爬取数据存入数据库...

    关于爬虫学习的一些小小记录(四)--爬取数据存入数据库 创建数据库 pymysql 模块 具体操作 预知后事如何 前面我们已经讲了怎么访问网页,并且从网页源码中提取数据.既然数据有了,怎样管理就是下一 ...

  2. 关于爬虫学习的一些小小记录(三)——BeautifulSoup

    关于爬虫学习的一些小小记录(三)--BeautifulSoup Beautiful Soup 使用 Beautiful Soup 修改代码 黑猫白猫 前面讲了一些访问页面和提取数据的基础方法,学会了挥 ...

  3. Python学习基础笔记三十二——正则表达式

    官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符.及这些特定字符的组合,组成一个"规则字符串",这个规则字符串用来表达对字符串的一种过滤逻辑. 1. ...

  4. python网络爬虫学习笔记(七):正则表达式

    文章目录 Python正则表达式 正则表达式的特点 正则表达式的语法 字符组 元字符与转义 排除型字符组 字符组简记法 量词 常用量词 Python的`re`模块 模式 特殊字符(参考教材p140) ...

  5. python爬虫学习笔记 1.9 (Handler处理器 和 自定义Opener)

    python爬虫学习笔记 1.1(通用爬虫和聚焦爬虫) python爬虫学习笔记 1.2 ( HTTP和HTTPS ) python爬虫学习笔记 1.3 str和bytes的区别 python爬虫学习 ...

  6. Python3 爬虫学习笔记 C06 【正则表达式】

    Python3 爬虫学习笔记第六章 -- [正则表达式] 文章目录 [6.1]关于正则表达式 [6.2]re.match() 方法 [6.2.1]提取内容 [6.2.2]通用匹配 [6.2.3]贪婪匹 ...

  7. 爬虫学习(二)--爬取360应用市场app信息

    欢迎加入python学习交流群 667279387 爬虫学习 爬虫学习(一)-爬取电影天堂下载链接 爬虫学习(二)–爬取360应用市场app信息 代码环境:windows10, python 3.5 ...

  8. 爬虫学习笔记(七)——Scrapy框架(二):Scrapy shell、选择器

    一.Scrapy shell scrapy shell的作用是用于调试,在项目目录下输入scrapy shell start_urls (start_urls:目标url)得到下列信息: scrapy ...

  9. 爬虫学习二: bs4 xpath re

    欢迎关注datawhale:http://www.datawhale.club/ 2.1 Beautiful Soup库入门 目标: 2.1.1 Beautiful Soup库的基本元素 2.1.2 ...

  10. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

最新文章

  1. c#中为datagrid添加下拉列表框
  2. Ubuntu10.10更新源
  3. 使用 GraalVM 将纯 JavaFX 项目打包成 EXE
  4. Linux内核分析— —计算机是如何工作的(20135213林涵锦)
  5. 再见“小明爬楼梯”问题
  6. (软件工程复习核心重点)第五章详细设计-第三节:过程设计工具
  7. 程序员相亲,因一双运动鞋惨被拒绝
  8. AI空谈情怀,也是要输的 | 人机辩论大战
  9. 重磅炸弹之英译世界名著137部
  10. 20200607每日一句
  11. pythonsqlite3模糊_让 Python 更加充分的使用 Sqlite3
  12. 使用番茄助手 快速注释
  13. Harbor 核心服务不可用---故障排除
  14. 打开桌面计算机投屏到扩展屏,华为智慧屏怎么共享电脑屏幕
  15. send sendto ,recv recvfrom有什么区别
  16. FPGA Vs 单片机 -- 嵌入式设计的另一种方法
  17. 计算机网络基础知识--TCP/IP协议、IP分组、TCP传输
  18. vscode查看变量及函数列表
  19. PHP实现微信公众号H5支付
  20. LDCP 02 - 奇偶校验码发展史

热门文章

  1. (Android学习)点击按钮Button,更换背景颜色
  2. 群晖7.X版安装cpolar内网穿透套件
  3. 批量发送短信,并批量插入短信记录
  4. Mac实用技巧(三)—— 四指新建桌面
  5. 芝麻小客服怎么进后台?
  6. session和coolie的区别
  7. C语言基础100例子
  8. 计算机打开后任务栏有但桌面不显示不出来,任务栏不显示打开的窗口,教您打开的窗口在任务栏上显示不出来...
  9. bug是什么意思详细介绍
  10. 磁珠 符号_史上最全面的磁珠知识大全