Python 正则表达式实战:高效提取网页电影下载地址
本文介绍如何利用 Python 的 re 和 requests 模块,通过正则表达式从网页 HTML 中快速提取电影 FTP 下载地址。相比繁琐的标签遍历,正则匹配能显著减少代码量并提高提取效率。文章包含完整的代码示例、编码处理技巧及运行结果分析,帮助开发者掌握高效的网页信息抓取方法。
正则表达式在网页爬取中的优势
在网页数据爬取过程中,若试图通过逐层解析 HTML 标签来获取电影下载地址,不仅需要编写大量代码,还需反复验证每一层级的标签结构是否正确,这种操作方式显然效率低下且繁琐。如图所示。那么,是否存在一种既能精简代码量,又能简便地提取特定标签内容的方法?本文将演示如何利用正则表达式快速定位并获取电影的下载地址。若读者对正则表达式尚不熟悉,可点击此处查阅相关学习资源。

Python 实现电影地址提取代码解析
在进行网页信息爬取时,利用正则表达式能够迅速提取指定标签内的关键信息。以获取电影下载地址为例,本案例需特别注意网页编码格式问题。如截图所示,可通过鼠标右键查看网页编码设置:

具体实现代码如下:
import re
import requests
def get_movies(url):
# 构造请求头
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/53"
"7.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
}
response = requests.get(url, headers=headers) # 发送请求
response.encoding = "gb2312" # 设置编码方式
# 判断请求是否成功 根据状态码是否等于200来判断
if response.status_code == 200:
# 获取每个电影详情页地址,通过正则表达式提取电影详情页地址
# <a href="/html/gndy/dyzz/20200411/59903.html" rel="external nofollow" class="ulink">2020年动作《绝地战警:疾速追击》BD中英双字幕</a>
movies_info = re.findall(r'<a href="(.*?)" rel="external nofollow" class="ulink">', response.text) # 返回符合表达式规则的数据列表
print(len(movies_info))
for url in movies_info: # 循环每个电影的详情页地址
info_url = "https://www.ygdy8.net" + url # 拼接完整地址
# 对电影详情页发送请求
movies_info_response = requests.get(info_url, headers=headers)
movies_info_response.encoding = "gb2312" # 设置编码方式
# 通过表达式匹配电影的下载地址
download_url = re.findall(r'<a href=".*?" rel="external nofollow" >(.*?)</a></td>', movies_info_response.text)
print(download_url)
if __name__ == '__main__':
get_movies("https://www.ygdy8.net/html/gndy/dyzz/index.html")
运行结果与数据展示
程序运行后的输出结果如下:
['ftp://ygdy8:ygdy8@yg39.dydytt.net:8014/阳光电影www.ygdy8.com.名字之歌.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg90.dydytt.net:6015/阳光电影www.ygdy8.com.我仍然相信.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:8018/阳光电影www.ygdy8.com.阿肯色.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg39.dydytt.net:4028/阳光电影www.ygdy8.com.惊天营救.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg90.dydytt.net:8067/阳光电影www.ygdy8.com.狩猎的时间.BD.1080p.韩语中字.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:7018/阳光电影www.ygdy8.com.7号房的礼物.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:8017/阳光电影www.ygdy8.com.格蕾特和韩塞尔.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:3028/阳光电影www.ygdy8.com.看不见的女人.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg90.dydytt.net:7067/阳光电影www.ygdy8.com.我们永不言弃.HD.1080p.国语中字.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:4026/阳光电影www.ygdy8.com.军人的妻子.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg90.dydytt.net:6014/阳光电影www.ygdy8.com.匹诺曹.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:4025/阳光电影www.ygdy8.com.叶问4:完结篇.BD.1080p.国粤双语中字.mkv'] ['ftp://ygdy8:ygdy8@yg39.dydytt.net:3024/阳光电影www.ygdy8.com.节奏组.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg39.dydytt.net:8013/阳光电影www.ygdy8.com.江湖儿女.BD.1080p.国语中字.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:3026/阳光电影www.ygdy8.com.琼斯先生.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg39.dydytt.net:7013/阳光电影www.ygdy8.com.地球最后的夜晚.BD.1080p.国语中字.mkv'] ['ftp://ygdy8:ygdy8@yg39.dydytt.net:3023/阳光电影www.ygdy8.com.梦幻岛.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:4023/阳光电影www.ygdy8.com.拧紧.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg39.dydytt.net:4026/阳光电影www.ygdy8.com.悲惨世界.BD.1080p.法语中字.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:4022/阳光电影www.ygdy8.com.真人快打传奇:蝎子的复仇.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg18.dydytt.net:7016/阳光电影www.ygdy8.com.我的间谍.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg39.dydytt.net:3021/阳光电影www.ygdy8.com.从不,很少,有时,总是.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg39.dydytt.net:4025/阳光电影www.ygdy8.com.绝地战警:疾速追击.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg39.dydytt.net:3020/阳光电影www.ygdy8.com.绅士们.BD.1080p.中英双字幕.mkv'] ['ftp://ygdy8:ygdy8@yg90.dydytt.net:8065/阳光电影www.ygdy8.com.二分之一的魔法.BD.1080p.中英双字幕.mkv'] 1
版权声明与说明
在此郑重声明,撰写本文旨在促进学习交流,并帮助更多 Python 初学者规避常见陷阱、节省学习时间,绝不用于其他用途。若涉及侵权,请联系作者删除。
关于 Python 利用正则表达式快速获取电影下载地址的介绍至此结束。如需了解更多 Python 正则表达式及下载地址相关内容,欢迎查阅本站过往文章或继续浏览后续系列文章。感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













