Python爬取糗事百科视频
一、题目要求:爬取糗事百科上的视频并下载到本地磁盘
二、代码
1、使用正则表达式清洗数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import requests import re headers = headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}#伪装成浏览器正常访问浏览器,创建头部信息 def mes(page): list1=[] for i in range(1,page+1): url = 'https://www.qiushibaike.com/video/page/{}/'.format(i) # 爬取多页。 #print(url) resp = requests.get(url,headers=headers) #print( resp )得到一个响应状态吗。200表示成功然后418表示反爬 #print( resp.request.headers )这里就是为神魔需要伪装成浏览器 #print(resp.text)返回内容 info = re.findall(r'<source src="(.*)" type=\'video/mp4\' />',resp.text)#参数:查找的规则,数据 list1.append(info) #print(type(info))提取出来的数据是一个列表 lst=[] #用于存储拼接后的url for item in list1: mes=item #print(mes) for i in mes: lst.append('https:'+i) dan(lst) #print(lst)#进行输出查看 def dan(lst): print(lst) count=0 for item in lst: resp=requests.get(item,headers=headers) count+=1 #上下文管理(视频保存到哪里)第一个参数为位置第二个参数为打开方式,str的作用是类型转换 with open('video/'+str(count)+'.mp4','wb') as file: #写入到本地磁盘 file.write(resp.content) #content说明的是二进制的而text是文本 if __name__ == '__main__': if mes(2): print("视频下载完毕")
2、使用BeautifulSoup清洗数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import requests from bs4 import BeautifulSoup #用于解析和提取网页数据的 headers = headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}#伪装成浏览器正常访问浏览器,创建头部信息 def mes(page): list1=[] for i in range(1,page+1): url = 'https://www.qiushibaike.com/video/page/{}/'.format(i) # 爬取多页。 #print(url) resp = requests.get(url,headers=headers) bs = BeautifulSoup(resp.text, 'html.parser') # 得到Bea--的对象了 info = bs.find_all('div', class_='article block untagged mb15 typs_recent') info1 = bs.find_all('div', class_='article block untagged mb15 typs_hot') for i in info: m = i.find('source')['src'] #print(m) list1.append(m) for i in info1: m = i.find('source')['src'] list1.append(m) #print(list1) lst=[] #用于存储拼接后的url for item in list1: lst.append('https:'+item) dan(lst) #print(lst)#进行输出查看 def dan(lst): print(lst) count=0 for item in lst: resp=requests.get(item,headers=headers) count+=1 #上下文管理(视频保存到哪里)第一个参数为位置第二个参数为打开方式,str的作用是类型转换 with open('video/'+str(count)+'.mp4','wb') as file: #写入到本地磁盘 file.write(resp.content) #content说明的是二进制的而text是文本 if __name__ == '__main__': if mes(2): print("视频下载完毕")
三、结果