python-re模块的使用案例

前言

在这里插入图片描述

本次我们使用requests模块以及re模块对天堂电影进行简单的爬取
re模块的简单使用参考:re模块的简单使用

模块的引用

模块库的引用

import re

import requests

代码实现

1·对网站发出请求

# 设定url

url = "https:******************。com"

# 发出requests请求

response = requests.get(url=url,verify=False)# verify=False去掉安全认证

print(response.text)
# 关闭请求,否则多次请求后可能造成程序报错
response.close()

发送请求后我们接收到的网页源码数据如下图:
在这里插入图片描述
这样的乱码文字我们我们是看不懂的造成这样的 原因是因为我们的字符集没有搞对
所有我们要在我们原来的代码上做出一定的修改
修改之后的代码:

# 设定url

url = "https://**************/"

# 发出requests请求

response = requests.get(url=url,verify=False)# verify=False去掉安全认证
response.encoding="gb2312" # 指定字符集
response_text = response.text
print(response_text) # 输出
# 关闭请求,否则多次请求后可能造成程序报错
response.close()

当使用如下代码的时候我们得到的结果就是可以看懂阅读的啦,结果如下:
在这里插入图片描述
2·使用re模块提取数据

  1. 首先我们现在网页中查看网页的源代码
    在这里插入图片描述

  2. 找到我们要提取的数据模块
    在这里插入图片描述
    这时候就要集合我们之前的re的使用以及正则表达式了

  3. 集合re模块编写正则表达

# 正则表达式
obj_ul =re.compile(r"2022必看热片.*?<ul>(?P<ul>.*?)</ul>",re.S)
# 再相应数据中提取信息
ul = obj_ul.finditer(response_text)
for ul_lines in ul:
    print(ul_lines.group('ul'))

重要提醒:一定不要忘记写re.S!!!!!!!!本人就总是忘,当然也没涨过记性。这是不好的习惯
re.S的作用:
在字符串a中,包含换行符\n,在这种情况下:
如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始。
而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,在整体中进行匹配。

运行完成后我们得到以下的数据我们得到以下的结果:
在这里插入图片描述
4. 进一步的提取数据
很显然上的数据结果也不是我们想要的最重结果,所以我们要对这些数据进行进一步的提取代码如下:

# 获取每个电影的链接:
obj_url = re.compile(r"<a href='(?P<url>.*?)'")
ret = obj_url.finditer(ul)
for its in ret:
    url_1 = its.group("url")
    print(url_1)
    # 获取电影名称
obj_name = re.compile(r"<a href='.*?' title=.*?>(?P<name>.*?)</a>",re.S)
ret_1 = obj_name.finditer(ul)
for it_n in ret_1:
    it_name =it_n.group('name')
    print(it_name)
 
  1. 持久化存储
    得到数据后我们要进行持久化的存储
   # 持久化存储
    with open("定影天堂.txt","a",encoding="utf-8") as sf:
        sf.write(it_name+":"+url+url_1+'\n')

我们得到的最后结果是这样的:
在这里插入图片描述
在存储的时候我们也可以让他更加美观在这我就不搞了

完整的代码

下面是这个简单的爬虫程序的全部代码:

# 引用库
import re
import requests

# 设定url

url = "https://www.dytt89.com/"

# 发出requests请求

response = requests.get(url=url, verify=False)  # verify=False去掉安全认证
response.encoding = "gb2312"  # 指定字符集
response_text = response.text
# print(response.text)
# 正则表达式
obj_ul = re.compile(r"2022必看热片.*?<ul>(?P<ul>.*?)</ul>", re.S)
# 再相应数据中提取信息
ul = obj_ul.finditer(response_text)
for ul_lines in ul:
    ul = ul_lines.group('ul')
# 获取每个电影的链接:
obj_url = re.compile(r"<a href='(?P<url>.*?)'")
ret = obj_url.finditer(ul)
for its in ret:
    url_1 = its.group("url")
    print(url_1)
    # 获取电影名称
obj_name = re.compile(r"<a href='.*?' title=.*?>(?P<name>.*?)</a>",re.S)
ret_1 = obj_name.finditer(ul)
for it_n in ret_1:
    it_name =it_n.group('name')
    print(it_name)
    # 持久化存储
    with open("定影天堂.txt","a",encoding="utf-8") as sf:
        sf.write(it_name+":"+url+url_1+'\n')
# 关闭请求,否则多次请求后可能造成程序报错

response.close()

一个小小的提示:在正则表达式的前面加一个小写的’r’可以让他没有下面的小黄线,但是有没有都可以不影响程序的运行。

代码仅供参考,希望可以帮到你,愿君前程似锦,未来可期去💯,感谢您的阅读,如果对您有用希望您留下宝贵的点赞和收藏,如有侵权联系删除

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿龙的代码在报错

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值