일괄 다운로드 비디오 게임 라이브러리 웹 사이트 - 작은 비디오 사이트 및 다운로드 비디오를 크롤링

첫 번째 문 :이 작은 비디오도 그 작은 비디오, 당신은 무언의 수

목표 : 이 사이트의 https://www.vmovier.com/ 이름이 라이브러리 필드를 묻는 것과 같다

 

"" " 
먼저 https://www.vmovier.com/는 요청을 보냅니다 
응답 구문 분석, 응답을 얻을 
모든 제목과 링크의 필터링됩니다 
동영상을 다운로드하는 요청을 보낼 링크를 걸러 내기를 
하고 내용을 저장합니다, 응답을 얻을, SRC 속성 요청을 전송 로컬 
주 : 이것은 동적 페이지 JS 데이터 캡처 인터페이스 요구이다 
패킷 캡쳐 도구 들러 이용 
인터페이스 정보 : HTTPS :? //www.vmovier.com/post/getbytab 탭 = 새 및 페이지 = 1 pagepart = 2 타입 = 0 제어기 = 인덱스 last_postid 58197 = 
"" " 
가져 오기 요청
 에서   BS4 가져 오기   BeautifulSoup로
 가져 오기 시간
 가져 오기 JSON
 에서 LXML 가져 오기 etree
 가져 오기 다시
 에서   셀레늄 가져 오기 webdriver
 에서 selenium.webdriver.chrome.options가져 오기 옵션 

#는 , 파라미터 객체를 생성 인터페이스 모드가 아닌 크롬에 설정되어 제어 할 수 
chrome_options = 옵션 ()
 # 열려있는 무한 모드 
chrome_options.add_argument가 ( ' --headless ' )
 #이 는 GPU의 해제 
chrome_options.add_argument를 ( ' --disable-GPU ' )
 #의 드라이브 경로 
경로 R & LT = " D : \ chromedriver \ chromedriver.exe ' 

#의 헤더 세계적으로 추가 
헤더 = {
     ' User-- 에이전트 ' : ' 모질라 / 5.0 (윈도우 NT 10.0 상기 WOW64) AppleWebKit / 537.36 (KHTML, 같은 게코) 크롬 / 65.0.3325.181 사파리 / 537.36 '
} 


# 이동 우리 같은 점프기구 Feel로 안티 오르기 다시 한번 필터링 URL이 점프 후 처리 기능을 오프 여과가 
DEF FanPa (R LT) :
     # 정규 취득 src 속성 
    match_obj = 재. 컴파일 (R & LT ' <속성 메타 = "이 문서는 있었다 제 : published_first."내용 = "새 영화 필드 (*)"/> ' ) 
    URL = re.findall (match_obj, r.text)
     #의 인쇄 (URL) 
    #의 종료 () 
    반환 URL 


#의 구문 분석 집, 제목 링크 모든 반환 
DEF의 : handle_title ()
     #은 입력 페이지의 원하는 번호를 크롤링 
    페이지 = INT (입력 ( " : 크롤링 할 페이지 수를 입력하십시오 " ))
     인쇄 ( " 시작 페이지 %를 s의 크롤링 ..... "%페이지)
     # 이 인터페이스로 데이터를 전송하는 동적 페이지 캡처 인터페이스이기 때문에 캡처 인터페이스를 적용하십시오 
    # 123 루프 쓸 수 있습니다 얼마나 많은 세 번 각각 배 각 페이지 새로 고침 페이지 새로 고침을 페이지 = 페이지 pagepart = 
    대한 T는  범위 (1,4 ) : 
        URL = " https://www.vmovier.com/post/getbytab?tab=new&page=% & pagepart = % D S " % (페이지, T)
         #의 인쇄 (URL) 
        #의 종료 () 
        requests.get = R & LT (URL = URL 헤더 = 헤더)
         #가 데이터를 직접 반환되기 때문에, 내용을 파싱 JSON JSON 포맷으로 분석 될 수 
        # 나중에 데이터 객체를 사용하지 임계의 JSON JSON 형식 발견 것은 제거 된 부분은 n으로 걸러 
        # 우리가 제목을 필요 링크가 제목과에서 H1 태그의 HREF입니다 
        # 파이썬 객체로 JSON 데이터 
        OBJ =json.loads (r.text)
         #에 인쇄 (OBJ) 
        #의 종료 () 
        # 제거하여 비디오 타이틀 및 URL과 관련된 모든 데이터를 일반 
        데이터 OBJ = ' 데이터 ' ]
         #에 인쇄 (데이터) 
        #의 # 출구 () 
        match_obj_url = re.compile (R & LT ' <a href="(.*)" title=".*全文" target="_blank"> </a>를 접기 ' ) 
        URL = re.findall (match_obj_url, 데이터)
         # 인쇄 (URL) 
        #에 인쇄 (LEN (URL)) 
        re.compile를 match_obj_title = (R & LT ' <a href=".*" title="(.*)全文" target="_blank"> 접기 </ A> ' ) 
        제목= re.findall (match_obj_title 데이터)
         #의 전단 (제목) 
        #에 인쇄 (렌 (제목)) 
        #의 종료 () 
        #의 주기는 비디오 정보의 각 목록 순차적으로 추출 된 데이터 
        # 타이틀 정보를 직접 사용할 수 있지만 후의 최종 접착 URL URL 2 홉 거기 
         나는  범위 (0.15) : # 각 15 원 - 목록이 데이터 
            end_title = 제목 [I]
             #의 인쇄 (end_title) 
            a_href = " HTTPS : //www.vmovier은. COM " + URL을 [I]
             #의 인쇄 (a_href) 
            #의 종료 () 
            # 이 비디오는 마지막 홉 처리에 필요한 URL이 아닙니다
            requests.get = R & LT (URL = a_href 헤더 = 헤더) 
            end_href = FanPa (R LT) # 이것은 끝에서 두 번째 URL에 
            #의 전단 (end_href) 
            #의 종료 () 
            video_src = get_video_url (end_href)
             #에 인쇄 (video_src) 
            #의 종료 () 
            # 다운로드 시작 주소 뒤에 원래 비디오 찾기 위해 
            인쇄 ( " 다운로드 S ... % 시작 " %의 end_title를) 
            파일 경로 = ' shipin / ' + + end_title ' .MP4 ' 
            R & LT = requests.get (URL = video_src) 
            열기 (파일 경로와, ' WB ' ) AS FP :
                fp.write (r.content) 
            인쇄 ( " %의 S 다운로드 완료 " %의 end_title) 


# 1 , 내용을 파싱 콘텐츠 취득 SRC 획득하기위한 요청을 전송 
DEF get_video_url (end_href) :
     #의 end_href 여기 #을 인쇄 (end_href)를 (A)의 하나 개의 요소 그래서 인덱스의 목록을 추가 
    #의 # 종료 () 
    # R = requests.get (URL = end_href [0], 헤더 = 헤더) 
    #의 인쇄 (r.text) 
    #의 ) 종료 ( 
    #을 페이지를 인쇄하려면 여기를 우리가 찾고있는 더 수익을 찾을 수 없습니다 비디오 링크 
    #은 다른 안티 상승 메커니즘 그렇게 해결에 궁극적 인 무기 헤드리스 브라우저 사용 될 가능성이 
    브라우저 = webdriver.Chrome을 (executable_path = 경로, 옵션 = chrome_options를)
    browser.get (end_href [0]) 
    time.sleep ( . 3 )
     # 가져 오기 소스, 오브젝트 트리를 생성 한 다음 비디오에서 src 속성을 찾기 위해 
    #의 인쇄 (browser.page_source) 
    #의 종료 () 
    수프 = BeautifulSoup로 (browser.page_source, ' LXML ' ) 
    video_src = soup.find ( ' 비디오 ' , 언급 된 ID = 위 " xpc_video " ) ' SRC ' ]
     #의 인쇄 (video_src) 
    #의 종료 () 
    반환 video_src 

DEF 주 () :
     #의 구문 분석 집, 모든 타이틀 링크 반환 
    handle_title을 ()
   IF  __name__ == ' __main__ ' :
    본관()

 

주요 문제는 알고 있어야합니다 :

(1)는, 자사의 캡처 인터페이스의이 페이지 일반적으로 지연로드에 대한 여과 및 제목 정보는 인터페이스 URL에서 반환

2,이 사이트는 점프 프로세스를 가지고, 등산 등의 방지 감지 메커니즘, 당신은 출력 HTML 페이지는 페이지 우리의 필요 여부를 확인하는 단계에 의해 단계를 통해 갈 수 있습니다

3, 등의 반환 JSON 데이터와 같은 일부 장소는 우리가 필터에 정규 표현식을 사용하도록을 얻을 것이다 형식 엄격하게 JSON 거기되어 있습니다

4, 때로는 모듈은 페이지의 콘텐츠를 얻을 수있는 브라우저 인터페이스 드라이브를 사용해야 할 수도 있습니다 페이지없이 우리가 원하는 것을 얻을 수없는 요청을 전송 요청

결과 :

 

 

추천

출처www.cnblogs.com/Qiuzhiyu/p/12177691.html