学习自:https://www.bilibili.com/video/BV1b64y117X6?p=43&spm_id_from=pageDriver
总述一下吧:
就是我们正常的页面,然后F12,看到的源码,是网页加载完毕之后的所有元素的源码, 但是我们 爬取
和查看页面源代码
看到的却和F12不一样,我们这时候查看到的就是 这一个页面的源码,
但是可能我们想要爬取的东西没有直接在 这个页面中,而是后期js或者Ajax等加载完的。然后我们要
但是 这个在页面源代码中看不到。。。这就很恶心了,,就是反爬机制
那就判断,,既然不再 这个页面的源代码里面,那么就是 后期的js脚本,加载之后又放到了这里面了。
进入我们要爬取的视频的连接
然后点击进入那个视频连接
可以的。把后面的爬完之后在回来整这个。
进入这个单独的一个视频的网站,
刷新页面,并选择 XHR。
!!!就找到了啊!!!,,但是不对的,,,我赋值下来这个url之后, 访问,是不对的。
那我们看看url之间的区别。
那么我们从网站的角度来思考是做了什么操作。
网页从这个XHR包中拿到srcurl之后,然后将中间这串数字替换成立 cont- ***之类的。然后我们就找一下在哪里。
import re
import requests
url = 'https://www.pearvideo.com/video_1727856' # 这个就是点开的视频的样子,这个也是可以批量抓取的,抓不到的是视频的本身的地址。
contId = url.split('_')[1] # 妙啊妙啊,
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
'Referer':'https://www.pearvideo.com/video_1727856'
}
# 这个是那个,F12有链接,但是 源码没有连接的那个页面。需要我们刷新抓包 XHR中的那个包,
# TurthUrl = 'https://www.pearvideo.com/videoStatus.jsp?contId=1727856&mrd=0.18480170530072626' # 最后面的是 随机数,然后contID可以传参进来
videoStatusUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}"
resp = requests.get(url = videoStatusUrl,headers = header)
print (resp.content)
import re
import requests
url = 'https://www.pearvideo.com/video_1727856' # 这个就是点开的视频的样子,这个也是可以批量抓取的,抓不到的是视频的本身的地址。
contId = url.split('_')[1] # 妙啊妙啊,
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
'Referer':'https://www.pearvideo.com/video_1727856'
}
# 这个是那个,F12有链接,但是 源码没有连接的那个页面。需要我们刷新抓包 XHR中的那个包,
# TurthUrl = 'https://www.pearvideo.com/videoStatus.jsp?contId=1727856&mrd=0.18480170530072626' # 最后面的是 随机数,然后contID可以传参进来
videoStatusUrl = f"https://www.pearvideo.com/videoStatus.jsp?contId={contId}"
resp = requests.get(url = videoStatusUrl,headers = header)
# print (resp.json()) # 变成json格式,便于获取变量,
systemTime = resp.json()['systemTime']
srcUrl = resp.json()['videoInfo']['videos']['srcUrl']
# print (srcUrl) # https://video.pearvideo.com/mp4/adshort/20210427/1620391070930-15665162_adpkg-ad_hd.mp4 .。这个还要替换一下
# 这个 是 真正的 https://video.pearvideo.com/mp4/adshort/20210427/cont-1727856-15665162_adpkg-ad_hd.mp4
truthUrl = srcUrl.replace(systemTime,f'cont-{contId}')
print (truthUrl)
# 下载视频:
with open('a.mp4',mode='wb') as f :
f.write(requests.get(url = truthUrl).content)
print ("oh");