声明:本篇文章仅供学习,请合理使用爬虫,尊重他人权益。
目录
一.目标
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就能匹配到换行符,然后进行定位,最终就能匹配到我们想要的那一块。
可以说是.*?走天下了。
以上就是本篇文章的全部内容,喜欢的话可以留个免费的关注呦~~~