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)
python爬虫实践——爬取“梨视频”的更多相关文章
- python爬虫:爬取网站视频
python爬取百思不得姐网站视频:http://www.budejie.com/video/ 新建一个py文件,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...
- from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...
- 使用requests爬取梨视频、bilibili视频、汽车之家,bs4遍历文档树、搜索文档树,css选择器
今日内容概要 使用requests爬取梨视频 requests+bs4爬取汽车之家 bs4遍历文档树 bs4搜索文档树 css选择器 内容详细 1.使用requests爬取梨视频 # 模拟发送http ...
- Python爬虫之爬取慕课网课程评分
BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
- Python3 多线程爬取梨视频
多线程爬取梨视频 from threading import Thread import requests import re # 访问链接 def access_page(url): respons ...
- requests爬取梨视频主页所有视频
爬取梨视频步骤: 1.爬取梨视频主页,获取主页所有的详情页链接 - url: https://www.pearvideo.com/ - 1) 往url发送请求,获取主页的html文本 - 2) 解析并 ...
- Python爬虫之爬取站内所有图片
title date tags layut Python爬虫之爬取站内所有图片 2018-10-07 Python post 目标是 http://www.5442.com/meinv/ 如需在非li ...
- python爬虫实战---爬取大众点评评论
python爬虫实战—爬取大众点评评论(加密字体) 1.首先打开一个店铺找到评论 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经 ...
随机推荐
- ajax前后端交互原理(1)
1.Node.js简介 1.1.前后台数据交互流程 在web开发中,我们经常听说前端和后台,他们分别是做什么具体工作的呢?他们怎样交互的呢?我们得把这些基础的问题都搞明白了,才有一个大致的学习方向,首 ...
- 补充:回答网友的问题,如何不用路径,而直接将CImage画到DC中,之后DC一起显示.
补充:回答网友的问题,如何不用路径,而直接将CImage画到DC中,之后DC一起显示.注释掉 pDC->BeginPath(); // 打开路径层 pDC->Rectangle(0,0,p ...
- 优雅关闭服务下线(Jetty)
在很多时候 kill -9 pid并不是很友好的方法,那样会将我们正在执行请求给断掉,同时eureka 中服务依旧是处于在线状态,这个时候我们可以使用官方提供的actuator来做优雅的关闭处理 - ...
- dll备份注意事项
test.dll20161111和test.dll同目录的时候,会报错!因为这样跟test1.dll(只是重名民)的效果是一样的,都会报错的. 同目录的情况下,应该改成test.dll.ddd. 为了 ...
- Dubbo远程调用之公司内部提供的服务
公司内部提供的服务 一家对外提供服务的公司,例如百度,腾讯,阿里,京东,58 同城等,公司内部有多个事业群,事业部门,每个事业部门内部又有若干个子部门,子部门里面有多个不同的小组负责各自的业务.提供对 ...
- ES6入门(二)
目录 ES6入门(二) es6之解构赋值 数组的解构赋值 对象的解构赋值 字符串的解构赋值 数值和布尔值的解构赋值 函数参数的解构赋值 圆括号问题 ES6入门(二) es6之解构赋值 数组的解构赋值 ...
- springbean 生命周期
springbean 和java对象得区别: 1.对象:任何符合java语法规则实例化出来的对象 2.springbean: 是spring对普通对象进行了封装为BeanDefinition,bean ...
- JVM 专题二:虚拟机(二)Java虚拟机
2.1 什么是Java虚拟机? Java虚拟机是一台执行字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成. JVM平台的各种语言可以共享Java虚拟机带来的 ...
- 数据可视化之DAX篇(八) DAX学习:使用VAR定义变量
https://zhuanlan.zhihu.com/p/64414205 前面介绍如何使用DAX生成日期表的时候,使用了VAR,有人留言问这个VAR怎么理解,那么这篇文章就来介绍VAR以及它的用法. ...
- git的工作区和暂存区
目录 备注: 知识点 工作区(Working Directory) 版本库(Repository) 备注: 本文参考于廖雪峰老师的博客Git教程.依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查 ...