爬取电影天堂的2025必看热片的片名、下载地址
2026/8/7 15:14:56 网站建设 项目流程

声明:本篇文章仅供学习,请合理使用爬虫,尊重他人权益。

目录

一.目标

1.举例

二.爬取“2025必看热片”所在页面的html

1.编写基础代码

2.修改代码

三.编写正则表达式,获取每个影片的页面请求路径

1.写代码

2.查看运行结果

四.爬取每一个影片的页面内容

1.写代码

2.查看运行结果​编辑

五.总结


一.目标

爬取“2025必看热片”中,涉及到的所有影片的下载地址。

1.举例

我们要用爬虫,一直重复上面的步骤,从而爬出所有“2025必看热片”中的所有影片的下载url

二.爬取“2025必看热片”所在页面的html

1.编写基础代码

import requests,re #一.爬取”2025必看热片“所在的页面的html #1.要爬的url domain = "https://www.dytt8899.com/" #2.爬取该url的页面html resp = requests.get(domain) #3.输出爬到的内容 print(resp.text)

查看运行效果

可见此时发生乱码了,因此要看看人家这个网站用的编码,查看过程如下:

可见此时,该页面使用“gb2312”这种编码。

2.修改代码

查看代码运行效果:

三.编写正则表达式,获取每个影片的页面请求路径

1.写代码

import requests,re #一.爬取”2025必看热片“所在的页面的html #1.要爬的url domain = "https://www.dytt8899.com/" #2.爬取该url的页面html resp = requests.get(domain) resp.encoding = 'gb2312'#设置字符集 #3.输出爬到的内容 #print(resp.text) #二.编写正则表达式,获取每个影片的页面请求 #1.预加载正则表达式:先拿到2025必看热片所在的那个大段 str1 = "" obj = re.compile(r"2025必看热片.*?<ul>(?P<subStr>.*?)</ul>", re.S) #2.开始匹配 result = obj.finditer(resp.text) #3.输出结果 for it in result: #保存这个大段 str1 = it.group("subStr") #4.在写一个正则表达式,匹配每一个热片的请求路径 list = [] obj2 = re.compile(r"<a href='(?P<subUrl>.*?)'", re.S) #5.对str1再进行一次匹配,找到所有影片的请求路径 result2 = obj2.finditer(str1) #6.输出结果 for it2 in result2: #将每个路径保存到list中 list.append(it2.group("subUrl")) #7.查看是否找到了所有影片的请求路径 print(list)

2.查看运行结果

如上图所示,可见此时成功获取到了每部影片的请求地址(是相对路径)。

那么我们下一步,只用一个一个的把这些相对路径,拼接上domain(基础路径),就能进一步访问每一个影片的详情页面。

四.爬取每一个影片的页面内容

1.写代码

import requests,re #一.爬取”2025必看热片“所在的页面的html #1.要爬的url domain = "https://www.dytt8899.com/" #2.爬取该url的页面html resp = requests.get(domain) resp.encoding = 'gb2312'#设置字符集 #3.输出爬到的内容 #print(resp.text) #二.编写正则表达式,获取每个影片的页面请求 #1.预加载正则表达式:先拿到2025必看热片所在的那个大段 str1 = "" obj = re.compile(r"2025必看热片.*?<ul>(?P<subStr>.*?)</ul>", re.S) #2.开始匹配 result = obj.finditer(resp.text) #3.输出结果 for it in result: #保存这个大段 str1 = it.group("subStr") #4.在写一个正则表达式,匹配每一个热片的请求路径 list = [] obj2 = re.compile(r"<a href='(?P<subUrl>.*?)'", re.S) #5.对str1再进行一次匹配,找到所有影片的请求路径 result2 = obj2.finditer(str1) #6.输出结果 for it2 in result2: #将每个路径保存到list中 list.append(it2.group("subUrl")) #7.查看是否找到了所有影片的请求路径 #print(list) #三.爬取每一个影片的页面 #1.遍历list,拼接上domain for x in list: #①拼接每个影片的完整url url = domain.strip("/") + x #②爬取每个影片页面的html resp2 = requests.get(url) resp2.encoding = "gb2312" #③查看页面内容 #print(resp2.text) #④爬取每个影片页面的电影名+下载地址 #预加载正则表达式 obj3 = re.compile(r'◎片 名 (?P<movieName>.*?)<br />.*?<td style=.*?href="(?P<downloadUrl>.*?)">', re.S) #开始匹配 resp3 = obj3.search(resp2.text) #打印片名、下载地址 print('片名:' + resp3.group("movieName") +'\n' + "下载地址:" + resp3.group("downloadUrl") + "\n")

2.查看运行结果

如上图所示,已经成功爬取出了每个影片的片名+下载地址。

下面我们用浏览器访问一下这个下载地址,看看是否真的可以下载:

可见此时这个需求,就完美完成了。

五.总结

这个案例中,最重要的就是.*?这种贪婪匹配所有字符,在配合着re.S就能匹配到换行符,然后进行定位,最终就能匹配到我们想要的那一块。

可以说是.*?走天下了。

以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询