青松100 发表于 2020-10-26 00:15:15

如何取得' 梨视频中的视频地址‘’?

小白如果有满意的答案,一定会及时结帖的,恳请路过的大佬、大神们帮助。

我的目标是要爬取:梨视频中-生活-最热中的4个视频。这个只是练习用。--我正在学习的爬虫教程视频,老师讲解的代码已经挂掉了,所以我只好自己写。

以下是我的分析:

1. 点开 其中一个这个梨视频的《超好听!中国老人演绎拉美歌曲》的网址进行分析和观察
https://www.pearvideo.com/video_1703247

(1)打开检查,抓包,定位到video_1703247,这个数据包的response并没有这个视频真正的地址,由此判断,这个视频地址是动态加载。
(2)点击XHR,发现一个ajax请求,response里面貌似包含 视频地址。请问以下蓝色的URL这个是不是真正的视频地址呢?

{
        "resultCode":"1",
        "resultMsg":"success", "reqId":"913ffda9-383e-4665-b927-8ac0b18ea488",
        "systemTime": "1603642230586",
        "videoInfo":{"playSta":"1","video_image":"https://image.pearvideo.com/cont/20201023/10008579-151234-1.png","videos":{"hdUrl":"","hdflvUrl":"","sdUrl":"","sdflvUrl":"","srcUrl":"https://video.pearvideo.com/mp4/third/20201023/1603642230586-10008579-151057-hd.mp4"}}
}


下面是我的代码,可是我爬下来,结果却没有这个视频地址,是我的代码写错了吗?


import requests
from lxml import etree
headers = {
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
url = 'https://www.pearvideo.com/category_5'
page_text = requests.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
#li_list = tree.xpath('//div[@id="listvideo-list clearfix"/ul/li]')
li_list = tree.xpath('//ul[@id="listvideoListUl"]/li')

for li in li_list:
    detail_url = 'https://www.pearvideo.com/'+ li.xpath('./div/a/@href')
    name = li.xpath('./div/a/div/text()') + '.mp4'
    id = li.xpath('./div/a/@href').split('_')
    #print(detail_url, name,id)
    #https://www.pearvideo.com/videoStatus.jsp?contId=1703247&mrd=0.9360606488589007
    ajax_url = 'https://www.pearvideo.com/videoStatus.jsp'
    params = {
      'contId': id,
      'mrd': '0.9360606488589007'
    }
    ajax_page_text = requests.get(url=ajax_url, headers=headers, params=params).json()
    print( ajax_page_text)

wp231957 发表于 2020-10-26 09:03:42

https://video.pearvideo.com/mp4/third/20201023/cont-1703247-10008579-151057-hd.mp4

这个是真实地址

青松100 发表于 2020-10-26 09:08:24

本帖最后由 青松100 于 2020-10-26 09:09 编辑

wp231957 发表于 2020-10-26 09:03
https://video.pearvideo.com/mp4/third/20201023/cont-1703247-10008579-151057-hd.mp4

这个是真实地址

非常谢谢大神的帮助。

那能不能教我,这个地址是咋找出来的呢?

我在1楼中的地址和您找到地址相比较,发现很接近,但是其中有个别参数不一样。

我现在只学到正则,XPATH, BS4

还没学到高级的,能不能先用初级的知识教我,不要用selenium之类的。

青松100 发表于 2020-10-26 09:10:25

wp231957 发表于 2020-10-26 09:03
https://video.pearvideo.com/mp4/third/20201023/cont-1703247-10008579-151057-hd.mp4

这个是真实地址

万分感谢大神。

能不能教我咋找出视频地址?

wp231957 发表于 2020-10-26 09:21:38

青松100 发表于 2020-10-26 09:10
万分感谢大神。

能不能教我咋找出视频地址?

没太细研究这个网站,有个别的视频就是你一楼的地址个别视频就是拼接的地址

青松100 发表于 2020-10-26 09:21:38

我还有一个问题,为啥1楼中我的代码,爬出来的不是 1楼中的那些字典(response 响应数据),而是:如下:

{'resultCode': '5', 'resultMsg': '该文章已经下线!', 'systemTime': '1603675273247'}
{'resultCode': '5', 'resultMsg': '该文章已经下线!', 'systemTime': '1603675273599'}
{'resultCode': '5', 'resultMsg': '该文章已经下线!', 'systemTime': '1603675273906'}
{'resultCode': '5', 'resultMsg': '该文章已经下线!', 'systemTime': '1603675274223'}

青松100 发表于 2020-10-26 09:26:52

本帖最后由 青松100 于 2020-10-26 09:27 编辑

wp231957 发表于 2020-10-26 09:21
没太细研究这个网站,有个别的视频就是你一楼的地址个别视频就是拼接的地址

我没看懂您是啥意思。

我的目的,不是要您给我某个视频的真实地址。--这个只是练习用的,我随便找来的一个视频。我的目的是要学会得到这个视频的地址的方法。

我现在只学会了XPATH, BS4,正则的基本语法,还没学到SELENIUM。要是可以的话,等您有空,麻烦您到时给分析一下,用这些基本的方法,教教我吧?(不要太高级的爬虫方法,我现在正在学某爬虫教程,还没学到那么深。)

wp231957 发表于 2020-10-26 10:11:41

青松100 发表于 2020-10-26 09:26
我没看懂您是啥意思。

我的目的,不是要您给我某个视频的真实地址。--这个只是练习用的,我随便找 ...

研究方向出现错误,爬虫问题 的难点并不是xpathbs4 正则什么的,这些都是浮云

真正的难点是如何获取我们想要的东东,也就是分析网站(网页)

kogawananari 发表于 2020-10-26 11:14:20

浏览器的F12点击XHR是找到了你说的ajax
但是F12的媒体里面就有视频源地址

青松100 发表于 2020-10-26 11:48:13

kogawananari 发表于 2020-10-26 11:14
浏览器的F12点击XHR是找到了你说的ajax
但是F12的媒体里面就有视频源地址

非常感谢,找到了。我下午再研究一下,可能会有后续的问题,希望到时您能再次帮助。

jtxs0000 发表于 2020-10-26 13:35:35

青松100 发表于 2020-10-26 11:48
非常感谢,找到了。我下午再研究一下,可能会有后续的问题,希望到时您能再次帮助。

把 Referer 加进去就能找到mp4了

青松100 发表于 2020-10-26 14:13:27

jtxs0000 发表于 2020-10-26 13:35
把 Referer 加进去就能找到mp4了

大神,咋加啊?

另外,为啥你可以完整得到AJAX的数据包的响应,为啥我1楼的代码,输出来的却是:


{'resultCode': '5', 'resultMsg': '该文章已经下线!', 'systemTime': '1603675273247'}
{'resultCode': '5', 'resultMsg': '该文章已经下线!', 'systemTime': '1603675273599'}
{'resultCode': '5', 'resultMsg': '该文章已经下线!', 'systemTime': '1603675273906'}
{'resultCode': '5', 'resultMsg': '该文章已经下线!', 'systemTime': '1603675274223'}

麻烦说详细一点,小白没有基础。谢谢

jtxs0000 发表于 2020-10-26 14:19:09

青松100 发表于 2020-10-26 14:13
大神,咋加啊?

另外,为啥你可以完整得到AJAX的数据包的响应,为啥我1楼的代码,输出来的却是:


请求头你肯定会吧,里面再加上Referer



最终效果

青松100 发表于 2020-10-26 14:48:48

本帖最后由 青松100 于 2020-10-27 05:44 编辑

jtxs0000 发表于 2020-10-26 14:19
请求头你肯定会吧,里面再加上Referer




能加你吗? 

这里发个链接也要审核,所以,请版主大大和各位网友见谅。

jtxs0000 发表于 2020-10-26 15:11:28

本帖最后由 jtxs0000 于 2020-10-27 10:38 编辑

青松100 发表于 2020-10-26 14:48
能加你吗?

这里发个链接也要审核,所以,请版主大大和各位网友见谅。

加了

青松100 发表于 2020-10-26 15:38:17

jtxs0000 发表于 2020-10-26 15:11
加了

我没看到您呀?

466337418 发表于 2020-11-19 18:17:07

本帖最后由 466337418 于 2020-11-19 18:30 编辑

楼主,我也是跟你一样的问题,我加了referer还是获取不了,ajax数据还是有问题,可否解答一下啊

已经处理好了,是param参数的顺序位置影响
页: [1]
查看完整版本: 如何取得' 梨视频中的视频地址‘’?