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:如有需 ...
随机推荐
- python-selenium自动化测试(火狐、谷歌、360浏览器启动)
一.打开谷歌浏览器 import selenium from selenium import webdriver browser = webdriver.Chrome(executable_path ...
- 二维数组初始化 遍历 动态赋值 内存图 Day08
package com.sxt.arraytest3; /* * 二维数组 */ public class TestArray { public static void main(String[] a ...
- shell 解析json
未完待续 ### 解析api json文件为csv文件 cd /api ` do id=$(echo ${i}|sed 's/.html//') echo -n "${id}|" ...
- Pytorch使用tensorboardX网络结构可视化。超详细!!!
https://www.jianshu.com/p/46eb3004beca 1 引言 我们都知道tensorflow框架可以使用tensorboard这一高级的可视化的工具,为了使用tensorbo ...
- 洛谷P1616 疯狂的采药
//完全背包 #include<bits/stdc++.h> using namespace std; ; ; int n,m,v[maxn],w[maxn],f[maxv]; int m ...
- selenium webdriver学习(二)————对浏览器的简单操作(转载JARVI)
selenium webdriver学习(二)————对浏览器的简单操作 博客分类: Selenium-webdriver selenium webdriver对浏览器的简单操作 打开一个测试浏览 ...
- iptables SNAT与伪装
Source NAT(SNAT)的主要應用,是让同一內部網路上的多部主机,可共用同一条Internet实体连線.直接与Internet相连的闸道器,可使用SNAT(搭配连線追蹤)来来改写內部网络与In ...
- centos安装hdp
1. 准备6和7的 YUM源包 1.1 centos 下载后解压到同一个目录 http://mirrors.163.com/centos/6/isos/x86_64/CentOS-6.9-x86_64 ...
- js实现点击隐藏图片
方法一: 把图片的display设为none,触发点击事件时,display变为block <style> img { width: 400px;height: 300px; displa ...
- java 两种进程创建方式比较
A extends Thread: 简单 不能再继承其他类了(Java单继承) 同份资源不共享 A implements Runnable:(推荐) 多个线程共享一个目标资源,适合多线程处理同一份资源 ...