python爬虫基础-Beautiful中的正则表达式的应用

本文介绍了正则表达式的基本符号及其在网页抓取工具BeautifulSoup中的使用方法。通过实例展示了如何利用正则表达式进行精确的内容匹配,并结合lambda表达式筛选具有特定属性的标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Beautiful中的正则表达式的应用


正则表达式常见的符号

符号含义例子匹配结果
*匹配前面的字符、子表达式或者括号里的字符0次或者多次a*b*aaabbbb
+匹配前面的字符、子表达式或者括号里的字符至少1次a+b+aabb
[]任意选择一个字符[A-Z]*ABC
()表达式编组(编组里的规则会优先运行)(a*b)*aaabbaab
{m,n}匹配前面的字符、子表达式或者括号里的字符m至n次(包括m和n)a{2,3}aab
[^]匹配任意一个不在括号里的字符[^a-z]APPLE
竖线匹配任意一个由竖线分割的字符、子表达式(键盘中的竖线,此处不能转义,使用汉字代替)b(a竖线i)dbad
_匹配任意单个字符(包括数字、空格、符号登)b_dbad
^指字符串开始位置的的字符或者子表达式^aapple
\转义字符\__
$用在正则表达式的末尾,用来从末尾匹配[A-Z]*[a-z]$ABCabc
?!不包含^((?![A-Z])_)$no-caps-here

BeautifulSoup与正则表达式

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html.read())
images = bsObj.findAll("img",{"src":re.compile("\.\./img/gifts/img.*\.jpg")})
for image in images:
    print(image["src"])
../img/gifts/img1.jpg
../img/gifts/img2.jpg
../img/gifts/img3.jpg
../img/gifts/img4.jpg
../img/gifts/img6.jpg

BeautifulSoup 与lambda表达式

Lambda 表达式本质上就是一个函数,可以作为其他函数的变量使用。BeautifulSoup 允许我们把特定函数类型当作findAll 函数的参数。唯一的限制条件是这些函数必须把一个标签作为参数且返回结果是布尔类型。BeautifulSoup 用这个函数来评估它
遇到的每个标签对象,最后把评估结果为“真”的标签保留,把其他标签剔除。

eles=bsObj.findAll(lambda tag: len(tag.attrs) == 2)
for ele in eles:
    print(ele)
<img src="../img/gifts/logo.jpg" style="float:left;"/>
<tr class="gift" id="gift1"><td>
Vegetable Basket
</td><td>
This vegetable basket is the perfect gift for your health conscious (or overweight) friends!
<span class="excitingNote">Now with super-colorful bell peppers!</span>
</td><td>
$15.00
</td><td>
<img src="../img/gifts/img1.jpg"/>
</td></tr>
<tr class="gift" id="gift2"><td>
Russian Nesting Dolls
</td><td>
Hand-painted by trained monkeys, these exquisite dolls are priceless! And by "priceless," we mean "extremely expensive"! <span class="excitingNote">8 entire dolls per set! Octuple the presents!</span>
</td><td>
$10,000.52
</td><td>
<img src="../img/gifts/img2.jpg"/>
</td></tr>
<tr class="gift" id="gift3"><td>
Fish Painting
</td><td>
If something seems fishy about this painting, it's because it's a fish! <span class="excitingNote">Also hand-painted by trained monkeys!</span>
</td><td>
$10,005.00
</td><td>
<img src="../img/gifts/img3.jpg"/>
</td></tr>
<tr class="gift" id="gift4"><td>
Dead Parrot
</td><td>
This is an ex-parrot! <span class="excitingNote">Or maybe he's only resting?</span>
</td><td>
$0.50
</td><td>
<img src="../img/gifts/img4.jpg"/>
</td></tr>
<tr class="gift" id="gift5"><td>
Mystery Box
</td><td>
If you love suprises, this mystery box is for you! Do not place on light-colored surfaces. May cause oil staining. <span class="excitingNote">Keep your friends guessing!</span>
</td><td>
$1.50
</td><td>
<img src="../img/gifts/img6.jpg"/>
</td></tr>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值