ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

spiders中的正则表达式艺术:高效提取视频、音频与图片链接的10个技巧

spiders中的正则表达式艺术:高效提取视频、音频与图片链接的10个技巧 spiders中的正则表达式艺术高效提取视频、音频与图片链接的10个技巧【免费下载链接】spidersPython爬虫返回一定格式的信息下载使用flask提供简易api。抖音无水印、皮皮虾、快手、网易云音乐、qq音乐、咪咕音乐、荔枝FM音频、知乎视频、最右语音、视频、微博......项目地址: https://gitcode.com/gh_mirrors/sp/spiders提到Python 爬虫很多新手第一反应是请求网页、解析 HTML。但你打开这个开源的spiders 爬虫项目就会发现它既不依赖笨重的解析框架也不靠点击右键检查而是用轻巧的正则表达式从抖音、快手、微博、知乎、网易云音乐、QQ 音乐、皮皮虾等平台的页面里精准提取无水印视频、音频与图片链接再交给 Flask 接口返回标准格式、批量下载。正则表达式看似老派却是这套多平台提取器的灵魂。这篇文章就带你拆解项目里 10 个真实在用的正则技巧学会它们你也能写出一行正则抓一个平台的优雅爬虫。上图是项目运行时的交互界面支持平台与可提取内容一目了然所有解析逻辑都集中在 extractor 目录下。1. 一条万能链接正则完成输入初筛在主入口 extract.py 中parse_urls用一条超长正则把用户输入里的所有 URL 一次性捞出来urls re.findall( rhttps?://[-A-Za-z0-9#/%?~_|!:,.;][-A-Za-z0-9#/%~_|]\.[-A-Za-z][-A-Za-z0-9#/%?~_|!:,.;][-A-Za-z0-9#/%~_|], text)它先匹配http://或https://协议头再用字符类[...]匹配域名、路径和查询参数中的常见字符。技巧核心把可能出现的字符全部收进字符类配合首尾的[-A-Za-z0-9#/%~_|]收尾字符保证匹配不会把标点切碎。这是提取视频、音频、图片链接前的第一道过滤器。2. 从分享链接的重定向里抓 IDvideo/(\d)抖音分享链接往往带参数真正的视频 ID 藏在重定向后的 URL 里。看 extractor/douyin.pyrep requests.get(share_url, headersheaders, timeout10) item_id re.findall(rvideo/(\d), rep.url)用\d匹配数字序列分组(...)只取出 ID 本身。技巧在于请求后先读rep.url而不是死磕原始分享文本——正则要匹配变化后的真实数据源。3. 懒惰匹配(.*?)从 JSON 字符串里精准取值页面返回的数据常是藏在 HTML 里的 JSON 字符串用贪婪.*会一路吃到结尾。项目大量使用懒惰匹配(.*?)如 extractor/weibo.pytitle_re rtitle: (.*?), mp4_720p_mp4_re rmp4_720p_mp4: (.*?),(.*?)表示能少匹配就少匹配遇到第一个,就停正好截住字段值。提取视频链接、音频链接、标题都靠这一招。4. 多档清晰度正则 or回退自动降级选最优微博视频有 720p、高清、低清三档。项目做法很聪明data[videos] mp4_720p_mp4 or mp4_hd_mp4 or mp4_ld_mp4三条正则分别匹配不同清晰度的视频链接字段再用or链式回退有 720p 就取 720p没有就降级。这是提取视频链接时的经典兜底策略避免因单个字段缺失而空手而归。5. 正则找到链接后用replace去掉水印抖音无水印视频的秘诀不止是正则还有一步偷天换日play_url info[video][play_addr][url_list][0].replace(playwm, play) data[videos] [play_url]先用正则拿到带水印的playwm地址再字符串替换成play得到无水印视频链接。正则负责定位字符串处理负责变形两者配合效果翻倍。6. 多视频页面用set()去重再逐个解析知乎回答里可能嵌多个视频extractor/zhihu_video.py 这样处理ids re.findall(rwww.zhihu.com/video/(\d{1,}), rep.text) ids list(set(ids)) # 去掉重复元素正则匹配全部 IDset()去重后转回列表。提取多个视频、音频、图片链接时去重能避免同一资源被重复下载。7. 用正则改写URL让不同端页面统一入口快手桌面版和 App 版 URL 格式不同extractor/kuaishou.py 先用正则识别并重写temp re.findall(rlive\.kuaishou\.com/u/\w/(\w), url) if temp: url https://c.kuaishou.com/fw/photo/{}.format(temp[0])提取出\w作品 ID 后拼成新 URL再请求统一入口。正则不仅提取还能改写这是多平台爬虫常用的一招。8. 从script里抠出 JSON再用json.loads解析快手页面把核心数据塞进window.pageData项目用正则整段抓取page_data re.findall(rscript typetext/javascriptwindow\.pageData (\{.*?\})/script, rep.text) page_data json.loads(page_data[0])注意这里转义了点号\.匹配字面量.并用(\{.*?\})懒惰匹配整段 JSON最后交给json.loads结构化解析。视频链接、图片链接就从解析后的对象里取出。正则负责框选范围JSON 负责精细取值。9. 字符类 转义正则也能当文件名清洁工下载前要清理文件名里的非法字符utils.py 的filter_name就是个小正则工具regexp re.compile(r(/|\\|:|\?|\*|\|||\|||\$)) space re.compile(r\s{2,}) return space.sub( , regexp.sub(, name))把/、\、:、?、*等统统转义后放进分组re.sub替换为空再把连续空格\s{2,}压成单个。可见正则不止于匹配链接还能保障提取后的资源安全落盘。10. 多条正则分工协作一套代码吃透音乐平台QQ 音乐的 extractor/qqmusic.py 把正则用到了极致——歌名、歌手、ID 各配一条songid re.findall(rsongid:(\d),, html) songmid re.findall(rsongmid:(.*?),, html) data[audioName] re.findall(rsongname:(.*?), html)[0] data[author] re.findall(rname:(.*?),, html)[0]提取出songmid后再拼接 vkey 接口参数获取真实音频链接。技巧把提取 ID和拼接 API拆成两步正则只负责第一跳后续用接口二次取真实链接是音乐类平台的通用打法。写在最后正则只是起点组合才是艺术回顾这 10 个技巧你会发现正则表达式提取链接的真正魅力在于组合先筛 URL、再抓 ID、然后降级选清晰度、最后去水印落盘。这套思路贯穿整个 extract.py 主流程和 extractor 下 30 多个平台的爬虫文件每个文件都是一个可复用的正则提取模板。如果你想亲自跑一遍克隆仓库后pip3 install -r requirements.txt运行python3 extract.py输入链接即可体验。动手改一改每条正则你会比看一百篇教程更懂正则的艺术。【免费下载链接】spidersPython爬虫返回一定格式的信息下载使用flask提供简易api。抖音无水印、皮皮虾、快手、网易云音乐、qq音乐、咪咕音乐、荔枝FM音频、知乎视频、最右语音、视频、微博......项目地址: https://gitcode.com/gh_mirrors/sp/spiders创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表