python 3爬虫学习笔记(3) —— 正则表达式

本文详细介绍了正则表达式的定义、规则及其在网页抓取中的应用,特别是在使用BeautifulSoup抓取特定元素时的技巧,如精确匹配电子邮件地址和图片URL。

一. 正则表达式的定义

正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

二.正则表达式的规则:

符号含义
*匹配前面的字符,子表达式或者括号里的字符0次或者多次
+匹配前面的字符,子表达式或者括号里的字符至少一次
[]匹配任意一个字符(任选一个)
()表达式编组(优先运行)
{m,n}匹配前面的字符,子表达式或者括号里的字符m到n次(包括m和n)
[^]匹配任意一个不在中括号里的字符
|匹配任意一个由竖线分割的字符,子表达式
.匹配任意单个字符(包括符号,数字,空格等)
^指字符串开始位置的字符或者子表达式
\转义字符
$经常用在正则表达式的末尾,表示“从字符串的末端匹配”。如果不用它,每个正则表达式实际都带着".*“模式,只会从字符串开头进行匹配。这个符号可以看作”^"的反义词
?!“不包含”,通常放在字符或者正则表达式前面,表示字符不能出现在目标字符串里。

三.正则表达式的应用

正则表达式在实际中的一个经典应用是识别邮箱地址。虽然不同邮箱服务器的邮箱地址规则不尽相同,但是还是可以创建几条通用规则。

规则正则表达式
1.邮箱地址的第一部分至少包括一种内容:大写字母,小写字母,数字0~9,点(.),加号(+)或者下划线(_)[A-Za-z0-9._+]+ :把所有可能的序列和符号放在中括号里,表示“括号中的符号里的任意一个”。后面的加号表示“至少出现一次”
2.之后,邮箱地址会包含一个@符号@
3.在@之后,必须至少包含一个大写或者小写字母[A-Za-z]+
4.之后跟一个点号(.)\.:域名前必须有一个点
5.最后邮箱地址用com,org,edu,net结尾(com|org|edu|net)

把上面的规则连接起来,就获得了完整的正则表达式:
[A-Za-z0-9\._+]+@[A-Za-z]+.(com|org|edu|net)

四.正则表达式和BeautifulSoup

在抓取网页的时候,BeautifulSoup和正则表达式总是配合使用的。其实,大多数支持字符串参数的函数都可以用正则表达式实现。

来看一个例子:
待抓取的网页是 http://www.pythonscraping.com/pages/page3.html
下面是这个页面的截图:

在这里插入图片描述

页面上有几个商品的图片——他们的源码形式如下:
在这里插入图片描述

如果我们想要抓取所有图片的URL链接,非常直接的做法就是用findAll(“img”)抓取所有图片。
但是这样做有一个问题,新式的网站里都有一些隐藏的图片,用于网页布局留白和元素对齐的空白图片,以及一些不容易察觉到的图片标签。总之,不能仅仅用商品图片来统计网页上的所有图片。
而且网页的布局也可能会变化,或者,由于某些原因,我们不想通过图片在网页中的位置来查找标签。那么当你想抓取随机分布在网站里的某个元素或者数据时,就会出现问题。

解决这些问题的办法,就是直接定位那些标签来查找信息:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html)
images = bsObj.findAll("img",{"src":re.compile("\.\.\/img\/gifts\/img.*\.jpg")})
for image in images:
    print(image["src"])

这段代码会打印出图片的相对路径:
在这里插入图片描述

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值