python爬虫 线程池创建并获取文件代码实例
本实例主要进行线程池创建,多线程获取、存储视频文件
梨视频:利用线程池进行视频爬取
#爬取梨视频数据 importrequests importre fromlxmlimportetree frommultiprocessing.dummyimportPool importrandom #定义获取视频数据方法 defgetVideoData(url):#url为列表中的视频url returnrequests.get(url=url,headers=headers).content #定义存储数据方法 defsaveVideo(data): fileName=str(random.randint(0,5000))+'.mp4' withopen(fileName,'wb')asfp: fp.write(data) #爬取数据 #实例化一个线程池对象,开启5个线程池 pool=Pool(5) url='https://www.pearvideo.com/category_1' headers={ 'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/72.0.3626.119Safari/537.36' } page_text=requests.get(url=url,headers=headers).text tree=etree.HTML(page_text) li_list=tree.xpath('//div[@id="listvideoList"]/ul/li') video_url_list=[]#存的是将要下载视频的url forliinli_list: detail_url='https://www.pearvideo.com/'+li.xpath('./div/a/@href')[0] detail_page=requests.get(url=detail_url,headers=headers).text #因为视频连接不在标签汇中,而是一个js语句,所以用正则匹配 video_url=re.findall('srcUrl="(.*?)",vdoUrl',detail_page,re.S)[0] video_url_list.append(video_url) #map函数的应用:参数1:回调函数,参数2:列表; #将列表中的参数赋值给回调函数的形参,让回调函数处理 video_data_list=pool.map(getVideoData,video_url_list) pool.map(saveVideo,video_data_list)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。