requests爬取梨视频主页所有视频
爬取梨视频步骤:
1.爬取梨视频主页,获取主页所有的详情页链接
- url: https://www.pearvideo.com/- 1) 往url发送请求,获取主页的html文本 - 2) 解析并提取详情页相对路径video_1637593,与主页拼接即可
- 拼接后获取的是电影详情页url:
- detail_url: https://www.pearvideo.com/ + video_1637593
2.往电影详情页发送请求,解析并提取真实视频url--> .mp4后缀的视频url
- 1) 往detail_url发送请求,获取detail_url的html文本
- 2) 解析并提取详情页中视频的真实url
案例一:
单线程同步爬取
import requests
import re
import uuid
# 1.发送请求
def get_html(url):
res = requests.get(url)
return res
# 2.解析数据
# 解析主页,获取视频详情页url
def parse_html(res):
# 获取所有视频的id
video_id_data = re.findall('<a href="video_(.*?)"',res.text, re.S)
"""
<a href="video_(.*?)" class="actwapslide-link">
"""
return video_id_data
# 3.请求 视频详情页,并解析出视频链接
def parse_detail(video_detail_url):
detail_html = requests.get(video_detail_url)
video_url = re.findall('srcUrl="(.*?)"',detail_html.text, re.S)[0]
"""
srcUrl="https://video.pearvideo.com/mp4/adshort/20191231/cont-1637727-14751751_adpkg-ad_hd.mp4"
"""
return video_url
# 4.保存数据
def save_video(video_url):
print('开始保存视频')
res_video = requests.get(video_url)
with open(f'{str(uuid.uuid4())}.mp4','wb') as f:
for line in res_video.iter_content():
f.write(line)
print('结束保存视频')
if __name__ == '__main__':
url = 'https://www.pearvideo.com'
res = get_html(url)
# 1.对梨视频主页进行解析,提取所有视频详情页的绝对路径
video_id_data = parse_html(res)
for video_id in video_id_data:
video_detail_url = url + '/video_' + video_id
# 2.往电影详情页发送请求,并解析
video_url = parse_detail(video_detail_url)
# 3.保存视频
save_video(video_url)
案例二:
多线程异步爬取
import requests
import re
import uuid
from concurrent.futures import ThreadPoolExecutor
# 创建线程池,最大连接数为50
pool = ThreadPoolExecutor(50)
# 1.发送请求
def get_html(url):
res = requests.get(url)
return res
# 2.解析数据
# 解析主页,获取视频详情页url
def parse_html(res):
# 获取所有视频的id
video_id_data = re.findall('<a href="video_(.*?)"',res.text, re.S)
"""
<a href="video_(.*?)" class="actwapslide-link">
"""
return video_id_data
# 3.请求 视频详情页,并解析出视频链接
def parse_detail(res): # res对象 --- 》 {'result': response}
detail_html = res.result()
# 通过回调得到的response参数是一个对象
video_url = re.findall('srcUrl="(.*?)"',detail_html.text, re.S)[0]
"""
srcUrl="https://video.pearvideo.com/mp4/adshort/20191231/cont-1637727-14751751_adpkg-ad_hd.mp4"
"""
# 异步提交任务爬取真实视频数据,并保存
pool.submit(save_video, video_url)
# 4.保存数据
def save_video(video_url):
print('开始保存视频')
res_video = requests.get(video_url)
with open(f'{str(uuid.uuid4())}.mp4','wb') as f:
for line in res_video.iter_content():
f.write(line)
print('结束保存视频')
if __name__ == '__main__':
import time
url = 'https://www.pearvideo.com'
res = get_html(url)
# 1.对梨视频主页进行解析,提取所有视频详情页的绝对路径
video_id_data = parse_html(res)
for video_id in video_id_data:
video_detail_url = url + '/video_' + video_id
time.sleep(0.1)
# 循环并发异步提交任务, add_done_callback将get_html任务的执行结果,回调给parse_detail函数
pool.submit(get_html, video_detail_url).add_done_callback(parse_detail)
requests爬取梨视频主页所有视频的更多相关文章
- 使用requests爬取梨视频、bilibili视频、汽车之家,bs4遍历文档树、搜索文档树,css选择器
今日内容概要 使用requests爬取梨视频 requests+bs4爬取汽车之家 bs4遍历文档树 bs4搜索文档树 css选择器 内容详细 1.使用requests爬取梨视频 # 模拟发送http ...
- Python3 多线程爬取梨视频
多线程爬取梨视频 from threading import Thread import requests import re # 访问链接 def access_page(url): respons ...
- python爬虫实践——爬取“梨视频”
一.爬虫的基本过程: 1.发送请求(请求库:request,selenium) 2.获取响应数据()服务器返回 3.解析并提取数据(解析库:re,BeautifulSoup,Xpath) 4.保存数据 ...
- Python爬取简书主页信息
主要学习如何通过抓包工具分析简书的Ajax加载,有时间再写一个Multithread proxy spider提升效率. 1. 关键点: 使用单线程爬取,未登录,爬取简书主页Ajax加载的内容.主要有 ...
- requests爬取百度音乐
使用requests爬取百度音乐,我想把当前热门歌手的音乐信息爬下来. 首先进行url分析,可以看到: 歌手网页: 薛之谦网页: 可以看到,似乎这些路劲的获取一切都很顺利,然后可以写代码: # -*- ...
- Requests爬取网页的编码问题
Requests爬取网页的编码问题 import requests from requests import exceptions def getHtml(): try: r=requests.get ...
- py3+requests+re+urllib,爬取并下载不得姐视频
实现原理及思路请参考我的另外几篇爬虫实践博客 py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图:http://www.cnblogs.com/UncleYong/p/6892688. ...
- nodejs爬虫笔记(三)---爬取YouTube网站上的视频信息
思路:通过笔记(二)中代理的设置,已经可以对YouTube的信息进行爬取了,这几天想着爬取网站下的视频信息.通过分析YouTube,发现可以从订阅号入手,先选择几个订阅号,然后爬取订阅号里面的视频分类 ...
- Python爬取知乎上搞笑视频,一顿爆笑送给大家
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:Huangwei AI 来源:Python与机器学习之路 PS:如有需 ...
随机推荐
- Class.forName(“com.mysql.jdbc.Driver”)
传统的使用jdbc来访问数据库的流程为: Class.forName(“com.mysql.jdbc.Driver”); String url = “jdbc:mysql://localhost:33 ...
- vmware中centos、redhat桥接网络配置
第一步 第二步 第三步 centos: redhat:
- 是readdir,还是readdir_r
readdir的原型如下: struct dirent *readdir(DIR *dirp); 因为内部使用了静态数据,所以readdir被认为不是线程安全的函数,POSIX[i]标准这样描述: T ...
- 04Redis入门指南笔记(内部编码规则简介)
Redis是一个基于内存的数据库,所有的数据都存储在内存中.所以如何优化存储,减少内存空间占用是一个非常重要的话题.精简键名和键值是最直观的减少内存占用的方式,如将键名very.important.p ...
- uni-app禁止滑动穿透
<view class="topWrapper" v-show="chooseShow" @click="chooseShow = false& ...
- day3_python之函数参数
一.形参 在定义函数时,括号内的参数称为形参,特点:形参就是变量名 def foo(x, y): # x=1,y=2 print(x) print(y) 二.实参 在调用函数时,括号内的参数成为实参, ...
- theadClasses设置Bootstrap Table表头样式
通过theadClasses属性设置表头样式. thead-light设置灰色背景 //bootstrap table初始化数据 itxst.com $('#table').bootstrapTabl ...
- MVC4 变更模板
模板位置: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 4 ...
- xshell评估期已过怎么办
重新下载更新即可,不要看到英文一脸懵逼,直接在页面中有红色*号的地方输入个人信息,licensetype 必须选 Home and School use(家庭和个人使用),最主要的是输入邮箱(必须是个 ...
- Mac MAMP 使用终端shell操作mysql数据库
在MAMP中已经集成了phpMyAdmin,可以很方便的管理mysql数据库,但是有的情况是phpMyAdmin不能做到的.比如,导入sql文件,当sql文件非常大(大于20MB)的时候,apache ...