python爬虫实践——爬取“梨视频”
时间:2019-06-16
本文章向大家介绍python爬虫实践——爬取“梨视频”,主要包括python爬虫实践——爬取“梨视频”使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、爬虫的基本过程:
1、发送请求(请求库:request,selenium)
2、获取响应数据()服务器返回
3、解析并提取数据(解析库:re,BeautifulSoup,Xpath)
4、保存数据(储存库)MongoDB
二、爬取“梨视频”中的某一个视频
1 # 爬取梨视频
2 import requests
3 url='https://video.pearvideo.com/mp4/adshort/20190613/cont-1565846-14013215_adpkg-ad_hd.mp4'
4 res = requests.get(url)
5 #将爬取的视频写入文件
6 with open('梨视频.mp4', 'wb') as f:
7 f.write(res.content)
三、正则表达式的使用
1、re.find.all('正则匹配规则',‘解析文本’,“正则模式”)
2、re.S:全局模式(对整个文本进行匹配)
3、指的是当前位置
4、*指的是查找所有
四、爬取整个“梨视频”中的视频
1 import requests 2 import re 3 import uuid 4 5 #1、发送请求 6 def get_page(url): 7 response=requests.get(url) 8 return response 9 10 #2、解析数据 11 def parse_index(text): 12 res=re.findall('<a href="video_(.*?)"',text,re.S) 13 14 detail_url_list=[] 15 for m_id in res: 16 detail_url='https://www.pearvideo.com/video_'+m_id 17 detail_url_list.append(detail_url) 18 19 return detail_url_list 20 21 #解析详情页获取视频url 22 def parse_detail(text): 23 movie_url=re.findall('srcUrl="(.*?)"',text,re.S)[0] 24 return movie_url 25 26 #3、保存数据 27 def save_movie(movie_url): 28 response=requests.get(movie_url) 29 with open(f'{uuid.uuid4()}.mp4','wb')as f: 30 f.write(response.content) 31 f.flush() 32 33 34 #主函数:(输入'main',然后按”回车“) 35 if __name__ == '__main__': 36 #1、对主页发送请求 37 index_res=get_page(url='https://www.pearvideo.com/') 38 #2、对主页进行解析、获取详情页id 39 detail_url_list=parse_index(index_res.text) 40 41 #3、对每个详情页url发送请求 42 for detail_url in detail_url_list: 43 detail_res=get_page(url=detail_url) 44 45 #4、解析详情页获取视频url 46 movie_url=parse_detail(detail_res.text) 47 print(movie_url) 48 49 #5、保存视频 50 save_movie(movie_url)
五、多线程爬取整个“梨视频”中的视频
1 import requests 2 import re # 正则模块 3 # uuid.uuid4() 可以根据时间戳生成一段世界上唯一的随机字符串 4 import uuid 5 # 导入线程池模块 6 from concurrent.futures import ThreadPoolExecutor 7 # 线程池限制50个线程 8 pool = ThreadPoolExecutor(50) 9 10 # 爬虫三部曲 11 12 # 1、发送请求 13 def get_page(url): 14 print(f'开始异步任务: {url}') 15 response = requests.get(url) 16 return response 17 18 19 # 2、解析数据 20 # 解析主页获取视频详情页ID 21 def parse_index(res): 22 23 response = res.result() 24 # 提取出主页所有ID 25 id_list = re.findall('<a href="video_(.*?)"', response.text, re.S) 26 # print(res) 27 28 # 循环id列表 29 for m_id in id_list: 30 # 拼接详情页url 31 detail_url = 'https://www.pearvideo.com/video_' + m_id 32 # print(detail_url) 33 # 把详情页url提交给get_page函数 34 pool.submit(get_page, detail_url).add_done_callback(parse_detail) 35 36 37 # 解析详情页获取视频url 38 def parse_detail(res): 39 response = res.result() 40 movie_url = re.findall('srcUrl="(.*?)"', response.text, re.S)[0] 41 # 异步提交把视频url传给get_page函数,把返回的结果传给save_movie 42 pool.submit(get_page, movie_url).add_done_callback(save_movie) 43 44 45 # 3、保存数据 46 def save_movie(res): 47 48 movie_res = res.result() 49 50 # 把视频写到本地 51 with open(f'{uuid.uuid4()}.mp4', 'wb') as f: 52 f.write(movie_res.content) 53 print(f'视频下载结束: {movie_res.url}') 54 f.flush() 55 56 57 if __name__ == '__main__': # main + 回车键 58 59 # 一 往get_page发送异步请求,把结果交给parse_index函数 60 url = 'https://www.pearvideo.com/' 61 pool.submit(get_page, url).add_done_callback(parse_index)
原文地址:https://www.cnblogs.com/lweiser/p/11035236.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【打包构建】Mac下使用expect实现执行sudo命令时自动输入密码
- ASP.NET Core 奇淫技巧之SPA部署
- SAP Cloud for Customer Rule Editor的使用方法和底层工作原理
- (数据科学学习手札94)QGIS+Conda+jupyter玩转Python GIS
- 72-STM32+ESP8266+AIR202基本控制篇-移植使用-移植Android的MQTT包到自己的工程项目
- 用上Latex实现编辑伪代码
- TensorFlow交叉熵函数(cross_entropy)·理解
- 第05期:Prometheus 数据查询(一)
- 技术分享 | MySQL 复制那点事 - Seconds_behind_Master 参数调查笔记
- 线程有多少种状态?Runnable 一定在执行任务吗?
- swift 中类(class)和结构体(struct)区别
- C语言三剑客之《C专家编程》一书精华提炼
- 前端必备技能:json-server全攻略
- 温故知新——Spring AOP(二)
- R语言中的偏最小二乘PLS回归算法