파 이 썬 이 배 를 기어 오 르 는 동 영상의 예시
1.웹 페이지 에서 동 영상 을 가 져 오 는 url
비디오 를 발견 한 url 은 id 가"Jprism Player"인 div 태그 의 video 태그 src 속성 에서 xpath 는 웹 페이지 를 분석 합 니 다.
video_url = tree.xpath("//div[@id='JprismPlayer']/video/@src")
그러나 되 돌아 오 는 값 이 비어 있 습 니 다.즉,이 video 라벨 은 원래 웹 페이지 에 존재 하지 않 고 동적 으로 불 러 올 수 있 습 니 다.2.동적 요청 으로 동 영상 url 가 져 오기
역시 동적 요청 에서 비디오 url 이 포 함 된 제 이 슨 데 이 터 를 발 견 했 습 니 다.
그러나 요청 을 한 후 받 은 제 이 슨 데 이 터 는 패키지 도구 에서 보 이 는 것 과 다 릅 니 다.요청 헤더 에 Referer 인 자 를 추가 해 보 세 요.referer 를 보면 마지막 비디오뒤 에는 첫 페이지 에 있 는 동 영상 번호 가 붙 어 있 습 니 다.
{
"resultCode":"1",
"resultMsg":"success", "reqId":"fd1c910d-f49a-431a-b9a4-9c193c3c1983",
"systemTime": "1611666178518",
"videoInfo":{"playSta":"1","video_image":"https://image1.pearvideo.com/cont/20210125/11107897-184717-1.png","videos":{"hdUrl":"","hdflvUrl":"","sdUrl":"","sdflvUrl":"","srcUrl":"https://video.pearvideo.com/mp4/third/20210125/1611666178518-11107897-181816-hd.mp4"}}
}
headers 에 Refer 를 넣 고 제 이 슨 데 이 터 를 무사히 받 았 습 니 다.json 데이터 에 있 는 동 영상 url 에 요청 한 것 은 404 페이지 입 니 다.
3.정확 한 URL 맞 추기
여기 서 어디 에 문제 가 있 는 지 생각 하 는 데 오 랜 시간 이 걸 렸 습 니 다.앞의 절 차 를 여러 번 정리 한 후에 야 알 수 있 었 습 니 다.사실은 동적 으로 돌아 오 라 고 요청 한 제 이 슨 데이터 의 영상 url 과 홈 페이지 video 태그 의 영상 url 은 전혀 일치 하지 않 습 니 다.
첫 페이지 에 불 러 온 동 영상 링크 는 정확 하고 동 영상 을 순조롭게 받 을 수 있 으 며 제 이 슨 데이터 의 링크 는 404 로 돌아 갑 니 다.그들 을 비교 해 보면 앞부분 은 같 지만 붉 은 선 틀 이 있 는 곳 에 가면 다르다.
정확 한 url 은 cont-영상 id-
제 이 슨 데이터 의 url 부분 은 숫자 입 니 다.
그러면 이 숫자 를 cont-영상 id-형식 으로 바 꾸 면 정확 한 영상 url 을 얻 을 수 있 습 니 다.
코드
#
import requests
from lxml import etree
import os
from multiprocessing import Pool
# url
url = "https://www.pearvideo.com/category_6"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
}
# , etree
response = requests.get(url=url, headers=headers).text
tree = etree.HTML(response)
#
video_id_list = tree.xpath("//ul[@class='listvideo-list clearfix']/li[@class='categoryem ']//a[@class='vervideo-lilink actplay']/@href")
video_name_list = tree.xpath("//ul[@class='listvideo-list clearfix']/li[@class='categoryem ']//a/div[@class='vervideo-title']/text()")
data_list = [{"name": video_name_list[i], "idNum": video_id_list[i][6:]} for i in range(len(video_name_list))]
#
if not os.path.exists("./videos"):
os.mkdir("./videos")
#
def down_video(data):
name = data['name']
idNum = data['idNum']
# headers, Referer id
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
'Referer': f'https://www.pearvideo.com/video_{idNum}'
}
# url url, id id
url = f'https://www.pearvideo.com/videoStatus.jsp?contId={idNum}'
# json
response = requests.get(url=url, headers=headers).json()
video_url = response["videoInfo"]["videos"]["srcUrl"]
# cont-
video_url = video_url.replace(video_url.split("/")[-1].split("-")[0], "cont-" + idNum)
#
video = requests.get(url=video_url, headers=headers).content
with open(f"./videos/{name}.mp4", "wb") as f:
print(f" {name} ...")
f.write(video)
print(f" {name} !")
if __name__ == '__main__':
#
pool = Pool(3)
pool.map(down_video, data_list)
pool.close()
pool.join()
총결산사실 가장 어 려 운 점 은 정확 한 영상 url 을 얻 는 것 이 고 중간 과정 이 비교적 복잡 하 다.이 주 소 를 찾 으 면 홈 페이지 에서 받 은 동 영상 id 를 더 하면 동 영상 을 순조롭게 받 을 수 있다.
홈 페이지 전체 동 영상 을 가 져 오 려 면 xpath 경 로 를 다시 설정 하면 됩 니 다.
이상 은 파 이 썬 이 배 를 기어 오 르 는 동 영상의 예시 적 인 상세 한 내용 입 니 다.파 이 썬 이 배 를 기어 오 르 는 동 영상 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.