爬虫学习04-正则解析模块re

本文详细介绍了Python的re模块,包括使用流程、正则表达式的元字符、贪婪与非贪婪匹配的概念,以及正则表达式分组的应用。通过案例分析,解释了如何在网页内容中提取特定信息,并提供了猫眼电影信息爬取的实践操作,涉及电影名称、主演和上映时间的抓取。

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

一、re模块使用流程

1.方法一

r_list=re.findall('正则表达式',html,re.s)

2.方法二(常用)

#创建正则编译对象
pattern=re.compile('正则表达式',re.s)
re_list=pattern.findall(html)

二、正则表达表达式元字符

元字符含义
.任意一个字符(不包括\n)
\d一个数字
\s空白字符
\S非空白字符
[]包含[]内容
*出现0次或多次
+出现1次或多次

例如

写出一个匹配任意一个字符的正则表达式

import re
pattern=re.compile('.',re.s) 

三、贪婪匹配和非贪婪匹配

1.贪婪匹配   :  .*

在整个表达式匹配成功的情况下,尽可能多的匹配

2.非贪婪匹配: .*?

在整个表达式匹配成功的情况下,尽可能少的匹配

import re

html='''
<html>
    <div><p>九霄龙吟惊天变</p></div>
    <div><p>风云际会浅水游</p></div>

</html>

'''
#贪婪匹配
#pattern =re.compile('<div><p>.*</p></div>',re.S)
#r_list=pattern.findall(html)
#print(r_list)

#非贪婪匹配
pattern = re.compile('<div><p>(.*?)</p></div>',re.S)
r_list=pattern.findall(html)
print(r_list)



四、正则表达式分组

1.在网页中,想要什么内容,·就加()

2.先按整体正则匹配,然后再提取分组()中的内容

如果有2个及以上分组(),则结果中以元组形式显示[(),(),()]

案例 1

从以下html代码啊结构中完成如下内容信息的提取

1、[(‘Tiger’),'Two...',(‘Rabbit’,‘Small...’)]

2.

动物名称:Tiger

动物描述:Two tigers two tigers run fast

动物名称:Rabbit

动物描述:Small white rabbit white and white

 页面结构如下

<div class="animal">
    <p class="name">
        <a title="Tiger"></a>
    </p>
    <p class="content">
        Two tigers two tigers run fast
    </p>
</div>

<div class="animal">
    <p class="name">
        <a title="Rabbit"></a>
    </p>

    <p class="content">
       Small white rabbit white and white
    </p>

</div>

见re_groups

import re
html='''
<html>
<div class="animal">
    <p class="name">
        <a title="Tiger"></a>
    </p>
    <p class="content">
        Two tigers two tigers run fast
    </p>
</div>

<div class="animal">
    <p class="name">
        <a title="Rabbit"></a>
    </p>

    <p class="content">
       Small white rabbit white and white
    </p>
</div>
</html>
'''

pattern=re.compile('<div class="animal">.*?title="(.*?)".*?'
                   'class="content">(.*?)</p>',
                   re.S)
r_list=pattern.findall(html)

for rt in r_list:
    print('动物名称',rt[0].strip())
    print('动物描述', rt[1].strip())




结果展示: 

 

字符串常用方法:

strip() :去除空格

split():  分割

replace:替换

练习

爬取猫眼电影信息:猫眼电影-榜单-top100榜

第一步

猫眼电影-第1页.html

猫眼电影-第2页.html

..........

第二步

1.提取数据:电影名称、主演、上映时间

2.先打印输出,再写入到本地

总结

请求模块(urllib.request)

request=request.Request(url,headers)

response=request.urlopen(request)

html=res.read().decode('utf-8')

编码模块(urllib.parse)

urlencode({dict})

urlencode({'wd':'美女',‘pn’:20})

解析模块(re)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值