当前位置: 首页 > news >正文

Python学习---基于正则表达式的简单爬取电影下载信息案例

一、定义函数获取列表页的内容页地址 get_movie_links()

1、定义列表的地址

2、打开url地址,获取数据

3、解码获取到的数据

4、使用正则得到所有的影片内容也地址
    4.1 遍历,取出内容页地址
    4.2 拼接内容页地址
    4.3 打开内容页地址
    4.4 获取数据,并读取
    4.5 解码内容页数据,得到html内容页文本
    4.6 使用正则,获取下载地址的连接
    4.7 把影片信息和下载链接,保存到字典中
    4.8 返回字典
二、主函数 main
1、调用 get_movie_list() ,得到字典
2、遍历字典,将内容保存到本地CSV文件中

"""
一、定义函数获取列表页的内容页的地址get_movie_links()
1、定义列表地址https://www.ygdy8.net/html/gndy/dyzz/list_23_1.html
2、打开url1地址,获取数据
3、解码获取到的数据
4、使用正则得到所有影片内容页的地址二、主函数
"""
import urllib.request
import re
import csvdef get_movie_links():# 1、定义列表地址https: // www.ygdy8.net / html / gndy / dyzz / list_23_1.htmlfilm_list_url = "https://www.ygdy8.net/html/gndy/dyzz/list_23_1.html"# 2、打开url1地址,获取数据response_list = urllib.request.urlopen(film_list_url)# 通过read()读取网络资源数据response_list_data = response_list.read()# 3、解码获取到的数据response_list_text = response_list_data.decode("gbk")# 4、使用正则得到所有影片内容页的地址# 使用findall()查找影片内容对应地址url_list = re.findall(r"<a href=\"(.*)\" class=\"ulink\">(.*)</a>", response_list_text)# 定义字典保存电影信息films_dict = {}# 保存地址[('/html/gndy/dyzz/20240514/64980.html', '2024年科幻动作《哥斯拉大战金刚2:帝国崛起》BD中英双字'),……]# 定义变量记录电影条数i = 1# 循环遍历列表得到每个电影的地址for content_url, film_name in url_list:# 拼接目标电影地址content_url = "https://www.ygdy8.net/" + content_url# 打开每一部电影的内容页地址response_content = urllib.request.urlopen(content_url)# 接收内容页的html二进制信息response_content_data = response_content.read()# 解码得到内容页的文本内容response_content_text = response_content_data.decode("gbk")# 取出下载内容页地址# print(response_content_text)result = re.search(r"href=\"(.*?)\"><strong><font style=\"BACKGROUND-COLOR: #ff9966\"><font color=\"#0000ff\">[<font size=\"4\">]*(.*?)</font>",response_content_text)# 将信息保存到字典中films_dict[film_name] = result.group(1)print(f"已经获取{i}条信息")i += 1return films_dictdef main():films_dict = get_movie_links()# 定义CSV文件名csv_file_name = "films.csv"# 打开文件进行写入with open(csv_file_name, 'w', newline='', encoding='utf-8') as csvfile:# 定义CSV文件的列名fieldnames = ['film_name', 'film_link']# 创建csv writer对象writer = csv.DictWriter(csvfile, fieldnames=fieldnames)# 写入列名行writer.writeheader()# 遍历字典并写入数据行for film_name, film_link in films_dict.items():writer.writerow({'film_name': film_name, 'film_link': film_link})print(f"数据已成功保存到当前目录下的{csv_file_name}")if __name__ == '__main__':main()

注意没有涉及代理,只是对正则表达式的练习应用,可能在爬取过程中被封禁ip,建议设置延时缓慢爬取或自己开启代理 ,否则慎用……

http://www.lryc.cn/news/352370.html

相关文章:

  • .DS_store文件
  • 【webrtc】内置opus解码器的移植
  • Java注解:讲解Java注解(Annotations)的概念,使用,并展示如何自定义注解,甚至框架级别的使用说明
  • 二维矩阵乘法案例
  • selenium安装出错
  • 前端中 dayjs 时间的插件使用(在vue 项目中)
  • tp5问题集记录 一
  • AGI技术与原理浅析:曙光还是迷失?
  • 探秘机器学习经典:K-近邻算法(KNN)全解析
  • 数据可视化每周挑战——全国星巴克门店数据可视化
  • 【前端】js通过元素属性获取元素
  • 申请轻纺行业工程设计资乙级对企业有什么要求
  • 基于单片机电梯控制系统设计与实现
  • 嵌入式单片机笔试题
  • 生活小区火灾预警新篇章:泵吸式可燃气体报警器的检定与运用
  • 263 基于matlab得到的频分复用(FDM,Frequency Division Multiplexing)实现
  • 使用v-model完成数据的双向绑定
  • 如何使用Android NDK将头像变成“遗像”
  • python判断字符串是否为回文串的详细解析与实现
  • 148.【Windows DOS命令脚本文件】
  • 推荐网站(13)plantumlb自动帮我们创建 UML 图表
  • 【vue-1】vue入门—创建一个vue应用
  • 【微信小程序开发】小程序前后端交互--发送网络请求实战解析
  • 【NOIP2013普及组复赛】题2:表达式求值
  • datasheet芯片数据手册—新手入门学习(二)【8-18】
  • UE5 双手握剑的实现(逆向运动学IK)
  • Java中的接口(Interface)及其与抽象类的区别
  • 代码随想录算法训练营第十四天(py)| 二叉树 | 递归遍历、迭代遍历、统一迭代
  • Golang并发编程-协程goroutine初体验
  • 驱动与系统学习网址