首页 > 编程语言 > 详细

开启线程池 爬取视频数据

时间:2019-04-22 13:31:44      阅读:151      评论:0      收藏:0      [点我收藏+]

使用线程池

#需求:使用线程池爬取视频数据
import requests
from lxml import etree
import re
import random
#导入线程池模块
from multiprocessing.dummy import Pool
pool = Pool(10)
#线程池的使用场景:应用在所有耗时的操作中

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
url = 'https://www.******.com/category_1'
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@id="listvideoListUl"]/li')
video_url_list = [] #装所有视频的连接
for li in li_list:
    detail_url = "https://www.******.com/"+li.xpath('./div/a/@href')[0]
    detail_page_text = requests.get(url=detail_url,headers=headers).text
    #使用正则对视频连接进行解析
    video_url = re.findall('srcUrl="(.*?)",vdoUrl=',detail_page_text,re.S)[0]
    video_url_list.append(video_url)
#对视频的连接发起请求获取视频数据
video_data_list = pool.map(getVideoData,video_url_list) #video_data_list存储的就是所有视频的二进制数据
#使用线程池进行持久化存储的操作
pool.map(saveVideoData,video_data_list)
def getVideoData(url):
    video_data = requests.get(url=url,headers=headers).content
    return video_data
def saveVideoData(data):
    fileName = str(random.randint(0,10000))+'.mp4'
    with open(fileName,'wb') as fp:
        fp.write(data)
        print(fileName,'下载成功')

开启线程池 爬取视频数据

原文:https://www.cnblogs.com/zhang-zi-yi/p/10749407.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!