IMDB의 데이터베이스 정보를 크롤링 요청 요청
- 요청 된 URL
https://movie.douban.com/top250
- 요청 방법
GET
- 요청 헤더
사용자 에이전트
쿠키
"" "" "" '' ' : IMDB 메시지 크롤링 영화 순위, 영화 이름, 영화 URL, 영화 감독의 영화 배우, 영화 년도, 장르 영화 음악, 영화 리뷰, 영화 소개 (1) 모든 집으로 분석 URL 먼저 A : https://movie.douban.com/top250?start=0&filter= 두 번째 페이지 : https://movie.douban.com/top250?start=25&filter= 세 번째 페이지 : HTTPS : //movie.douban ? .COM / TOP250 시작 = 50 & 필터 = '' ' 가져 오기 요청 가져 오기 를 다시 #의 크롤러 부작 # 1 요청 전송 DEF get_page (URL) : 응답 = requests.get (URL) #의 인쇄 (응답.텍스트) 반환 응답 # 2, 분석 데이터 데프parse_index (HTML) : '' '' '' '' ' 영화 순위, 영화의 URL, 영화 이름, 영화 감독, 영화 주연 영화 년 / 장르, 영화 음악, 영화 리뷰, 영화 소개 <DIV 클래스 = "항목"> . * <? EM 클래스 = ""> (. *?) </ EM>. *? <a href="(.*?)"> . * <? 스팬 클래스 = "제목"> (. *?) 주연 </ SPAN> * 감독 :? (*.?) (.? *) (.? *) 한국어 </ ρ-> * <.? 스팬 클래스 = "rating_num"*> (*.?. ?) </ SPAN>. * ? <SPAN> (. *?) 사람들이 </ SPAN> 댓글을 달았습니다 . *? <스팬 클래스 = "INQ"> (. *?) </ SPAN> <DIV 클래스 = "항목" >. * <? EM 클래스 = ""> (. *?) </ EM>. *?의 <a href="(.*?)">. * <? 스팬 클래스 = "제목"> (. *? ) </ SPAN> * 감독 :? (*) 주연 :.?.? (*) 로 <br> (*) </ p>.?.* <? 스팬 클래스 = "rating_num". *?> (. *?) </ SPAN>. *? <SPAN> (. *?) 人 评价 </ SPAN>. *? <스팬 클래스 = "INQ"> (. *?) </ SPAN> '' movie_list = re.findall ( '<div 클래스 = "항목"> . * <? EM 클래스 = ""> (. *?) </ EM>. *? <a href="(.*?)">. * <? 스팬 클래스 = " 제목 "(*.?)> </ SPAN> * 주연 이사 :? (*.?)로 <br> </ p> * < .? 스팬 클래스 = (.? *) (.? *)"rating_num ". *?> (. * ?) </ SPAN>. *? <SPAN> (. *?) 사람 주석 </ SPAN>. *? < 스팬 클래스 ="INQ "> (. *?) </ 스팬 > ' , HTML, re.S는) 반환 movie_list # 3 데이터 저장 DEF의 : save_data (동영상) #의 필름 주연, 영화, 영화 감독의 영화 순위, 영화의 URL, 이름을 #을 , 영화 년 / 장르, 영화 음악, 영화 리뷰 영화의 최고는 m_url, 이름, daoyan, 배우, year_type, \ 점은, 커밋DESC = 영화 year_type = year_type.strip ( " \ n을 ' ) 데이터F는 = '' ' ========== ========= 환영 시계를 순위 영화 : {최고} 영화 URL : {m_url} 영화 이름 : {이름} 영화 감독을 : {daoyan} 출연 영화 : {배우} 년도 유형 : {year_type} 영화 등급 : {점} 영화 리뷰 : {커밋} 영화 : {내림차순} ======== ======= 다음에 요 제발 돌아와 = \ N- \ N- '' ' 인쇄 (데이터) 열기 (와 ' douban_top250.txt ' , ' ', 인코딩 = ' UTF-8. ' ) F AS : f.write (데이터) 인쇄 (F ' 영화 : {이름} 성공적으로 기록 ... ' ) 경우 __name__ == ' __main__ ' : #은 모든 홈 접합 NUM = 0 대한 라인 의 범위 (10 ) : URL = F ' https://movie.douban.com/top250?start={num}&filter= ' NUM + = 25 인쇄 (URL) # 1. 각 가정에 요청 전송 index_res을 = get_page (URL) #2. 영화 정보에 대한 홈 페이지 구문 분석 movie_list = parse_index (index_res.text)를 위한 영화 에 movie_list : #의 인쇄 (동영상) # 3. 저장 데이터 save_data (동영상)
두 셀레늄 요청 라이브러리
1. 셀레늄은 무엇입니까?
열기는 자동화 된 테스트 도구, 그것의 구동 원리이다
일부 특정 좋은 작업을 수행 할 수있는 브라우저. 의 파충류 자연
이 파충류를 위해 사용할 수 있도록 브라우저는 아날로그입니다.
2. 왜 셀레늄을 사용합니까?
장점 :
- JS 코드 실행
- 복잡한 통신 프로세스를 분석 할 필요없이
브라우저에 할 팝, 풀다운 및 기타 작업 -
- ***** 동적 데이터를 얻을
- *** 균열이 인증 로그인
단점 :
- 낮은 효율
3, 설치 및 사용
셀레늄 요청 라이브러리를 설치 : 1.
PIP3는 셀레늄 설치
2. 당신은 브라우저를 설치해야합니다
, "구글"또는 파이어 폭스
3는 브라우저 드라이버 설치
http://npm.taobao.org/mirrors/chromedriver/2.38/
: 윈도우
다운로드는 Win32 드라이브를
셀레늄의 기본 사용
에서 셀레늄 가져 오기 webdriver #의 웹 드라이브 에서 selenium.webdriver.common.by의 수입 으로 #은 어떤 방법으로, By.ID, By.CSS_SELECTOR 찾을 에서 selenium.webdriver.common.keys 가져 오기 키 #의 키보드 키 조작 에서 selenium.webdriver.support 오기 EC의 AS expected_conditions # 다음 WebDriverWait 함께, 그리고 행 selenium.webdriver.support.wait 오기 WebDriverWait의 # 개 페이지에 대한 대기는 특정 요소를로드 오기 시간 가져 시차 #의 방법 : 오픈 브라우저가 구동 중 #드라이버 = webdriver.Chrome (R '절대 경로 /webdriver.exe 드라이브') #의 방법 : 설치 디렉토리 webdriver.exe 파이썬 인터프리터로 운전 / 스크립트 폴더 #의 파이썬 인터프리터 설치 디렉토리는 / 스크립트 환경 변수를 구성 # 파이썬 인터프리터 설치 디렉토리 구성 환경 변수 드라이버 = webdriver.Chrome () 은 try : driver.get ( ' https://www.jd.com/ ' ) #은 명시 적으로 대기를 얻기 10 초 객체 #이 레이블을로드 기다릴 수 10초 대기 = WebDriverWait (드라이버, 10 ) # 1 번호 키 요소 발견 INPUT_TAG = wait.until (EC.presence_of_element_located ( (By.ID, ' 키 ' ) )) time.sleep을 ( . 5) # 입력 상자에 제품 이름을 입력 input_tag.send_keys ( ' 인형 ' ) #을 눌러 키보드의 Enter 키를 input_tag.send_keys을 (Keys.ENTER) time.sleep ( 20 ) 최종적 : #은 브라우저 버전 운영 체제 자원 닫 드라이버를. close ()를
셀레늄 선택
'' '' '' 에서 셀레늄 가져 오기 webdriver의 #의 웹 드라이브 에서 selenium.webdriver.common.keys 가져 오기 키 #의 키보드 동작 가져 오기 시간 가져 오기 시간 드라이버 = webdriver.Chrome () 은 try : # 암시 대기 : 호출하기 전에 얻을 필요가있다 # 모든 요소를로드하는 데 10 초 정도 기다리 driver.implicitly_wait (10 ) driver.get ( ' https://www.baidu.com/ ' ) # 명시 적으로 대기 : 전화 후 GET 필요 (. 5를 time.sleep를 ) '' ' = 모든 방법 ============== =================== 요소 이 레이블을 찾을 수 있습니다 요소 것은 모든 레이블을 찾을 수 있습니다 '' ' # 바이두 시작 자동 로그인 # 링크 된 텍스트를 통해 이동 find_element_by_link_text 1, #을 (= driver.find_element_by_link_text LOGIN_LINK ' 로그인 ' ) login_link.click () #의 클릭 로그인 (time.sleep . 1 ) # 2, #의 find_element_by_id ID는 통과 (USER_LOGIN = driver.find_element_by_id ' TANGRAM__PSP_10__footerULoginBtn ' ) user_login.click () time.sleep ( . 1 ) # . 3, find_element_by_class_name 사용자 driver.find_element_by_class_name = (" 통과 텍스트 입력 사용자 명이 ' ) user.send_keys ( ' ***** ' ) # 4 find_element_by_name PWD = driver.find_element_by_name ( ' 암호 ' ) pwd.send_keys ( ' *****를 ' ) 에 제출 = driver.find_element_by_id ( ' TANGRAM__PSP_10__submit ' ) submit.click () #의 단부 # 5 find_element_by_partial_link_text # 局部链接文本查找 LOGIN_LINK driver.find_element_by_partial_link_text = ( ' 登" ) Login_link.click () # . 6 find_element_by_css_selector의 #은 속성 선택기 엘리먼트 찾기 # :. 클래스 #의 # : ID의 login2_link = driver.find_element_by_css_selector ( ' .tang 패스 - footerBarULogin ' ) login2_link.click () # . 7 find_element_by_tag_name의 DIV driver.find_elements_by_tag_name = ( ' DIV ' ) 인쇄 (DIV) time.sleep ( 20 ) 이 finally : #은 브라우저 버전의 운영 시스템 자원 닫습니다 driver.close을 ()