开启线程池 爬取视频数据

使用线程池

#需求:使用线程池爬取视频数据
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,'下载成功')

猜你喜欢

转载自www.cnblogs.com/zhang-zi-yi/p/10749407.html