python爬取梨视频生活板块最热视频

共 3395字,需浏览 7分钟

 ·

2021-03-16 11:47

完整代码如下:

  1. import requests

  2. from lxml import etree

  3. import random

  4. import os

  5. from multiprocessing.dummy import Pool

  6. if not os.path.exists('./视频'):

  7. os.mkdir('./视频')

  8. urls=[]

  9. url='https://www.pearvideo.com/category_5'

  10. headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36 Edg/89.0.774.45'}

  11. page_text=requests.get(url=url,headers=headers).text

  12. tree=etree.HTML(page_text)

  13. li_list=tree.xpath('//ul[@id="listvideoListUl"]/li')

  14. for li in li_list:

  15. a_url='https://www.pearvideo.com/'+li.xpath('./div/a/@href')[0]

  16. name=li.xpath('./div/a/div[2]/text()')[0]+'.mp4'

  17. mrd=random.random()

  18. code=li.xpath('./div/a/@href')[0][-7:]

  19. new_headers={'Referer': a_url,

  20. 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 Edg/89.0.774.50'

  21. }

  22. new_url='https://www.pearvideo.com/videoStatus.jsp?contId='+str(code)+'&mrd='+str(mrd)

  23. r=requests.get(url=new_url,headers=new_headers)

  24. video_url=eval(r.text)['videoInfo']['videos']['srcUrl']

  25. old=video_url.split('/')[-1].split('-')[0]

  26. new='cont-'+str(code)

  27. true_video_url=video_url.replace(old,new)

  28. dic={'name':name,

  29. 'my_url':true_video_url}

  30. urls.append(dic)

  31. #使用线程池对数据视频进行请求

  32. def get_video_data(dic):

  33. print(dic['name']+'开始下载'+'\n')

  34. data_url=dic['my_url']

  35. data=requests.get(url=data_url,headers=headers).content

  36. with open('./视频/'+dic['name'],'wb') as f:

  37. f.write(data)

  38. print(dic['name']+'下载成功')

  39. pool=Pool(4)

  40. pool.map(get_video_data,urls)

  41. pool.close()

  42. pool.join()

说明:

当前日期(2021/3/14)版本的梨视频的视频伪url由ajax获取。

部分代码解释:

1:模块

  1. import requests #网路爬虫标准库(代替urllib)

  2. from lxml import etree #用于解析页面信息

  3. import random #梨视频的url中有一段需要随机数

  4. import os #主要用于生成文件夹存放视频

  5. from multiprocessing.dummy import Pool #导入线程池对应类

2:获取视频伪url

  1. #参数准备

  2. mrd=random.random()

  3. code=li.xpath('./div/a/@href')[0][-7:]

  4. new_headers={

  5. 'Referer': a_url,

  6. 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 Edg/89.0.774.50'

  7. }

  8. #获取url

  9. new_url='https://www.pearvideo.com/videoStatus.jsp?contId='+str(code)+'&mrd='+str(mrd)

  10. r=requests.get(url=new_url,headers=new_headers)

  11. video_url=eval(r.text)['videoInfo']['videos']['srcUrl']

3:获取真正url

经本人实验,使用上文获得的url爬取视频下载内容为空。

此处视频地址做了加密即ajax中得到的地址需要加上cont-,并且修改一段数字为id才是真地址
真地址:"https://video.pearvideo.com/mp4/third/20201120/cont-1708144-10305425-222728-hd.mp4"
伪地址:"https://video.pearvideo.com/mp4/third/20201120/1606132035863-10305425-222728-hd.mp4"

  1. #仅需要做几个简单的截取切片操作就可以替换相关内容

  2. old=video_url.split('/')[-1].split('-')[0]

  3. new='cont-'+str(code)

  4. true_video_url=video_url.replace(old,new)

4:存储

  1. #使用线程池对数据视频进行请求

  2. def get_video_data(dic):

  3. print(dic['name']+'开始下载'+'\n')

  4. data_url=dic['my_url']

  5. data=requests.get(url=data_url,headers=headers).content

  6. with open('./视频/'+dic['name'],'wb') as f:

  7. f.write(data)

  8. print(dic['name']+'下载成功')

  9. pool=Pool(4)

  10. pool.map(get_video_data,urls)

  11. pool.close()

  12. pool.join()

5:结果

到此这篇关于python爬取梨视频生活板块最热视频的文章就介绍到这了

扫下方二维码加老师微信

或是搜索老师微信号:XTUOL1988【切记备注学习Python】

邀您来听Python web开发,Python爬虫,Python数据分析,人工智能 免费精品教程0基础入门到企业项目实战教学!


扫一扫
更多咨询早知道!



欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持


万水千山总是情,点个【在看】行不行

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜

浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报