파이썬은 데이터의 여러 페이지를 크롤링 파충류

지금은 수요가 크롤링,이 http://www.chinaooc.cn/front/show_index.htm 모든 코스 데이터를.

 

 

 

데이터 페이징 때문에,를 크롤링하는 종래의 방법에있어서, 가능하지 않다 :

 

 열쇠는 모든 파충류는 데이터의 첫 페이지를 크롤링 그래서, 브라우저의 주소 표시 줄이 일정, 처음 몇 페이지인지 여부입니다. 새로운 데이터에 대한 정보를 얻으려면 F12를 클릭하기 위해, 페이지의 소스 코드를 볼 수, 당신은 JS가 동적으로로드 사용하여 데이터,하지만 주소 만 skipToPage (..) 함수를 찾을 수 있습니다.

그래서, 솔루션입니다 :

  1. 헤더 및 폼 데이터를 포함하는, 요청 된 정보를 획득 (폼 정보)
  2. 아날로그 요청 된 데이터를 얻기
  3. 데이터 분석 결과 얻어진

다음 구현 단계 :

페이지 네트워크 -> XHR이 경우, 점프 버튼 클릭을 다음과 같이 선택도 콘솔에 도시 된 바와 같이, 요구 정보를 취득 1. 콘솔 발행 요구되며, 그리고 선택하고 파일 요청 (제 3 단계)을 선택하고, 헤더 아래 요청 헤더 정보이다.

 

 

제 2 헤더는 상기 제 데이터 요청이다 헤더 부분에서 발견 파이썬 시뮬레이션 요구 요청을 사용.

 

 그런 다음 폼 데이터를 찾을 수

 

 위의 내용을 복사 한 다음 코드가 형성된다

헤더 = {
     ' 동의 ' : ' text / html과, * / *; Q = 0.01 ' ,
     ' 인코딩을 수락 ' : ' gzip을, 폐의 ' ,
     ' - 언어 수락 ' : ' 에서 zh-CN,에서 zh, Q = 0.9, 욕실, Q = 0.8, 코, Q = 0.7 ' ,
    
    ' 연결 ' : ' 연결 유지 ' ,
     ' 콘텐츠 길이 ' : ' 61 ' ,
     ' 쿠키 ' : ' 경로 = bd118df546101f9fcee5c1a58356a008; JSESSIONID = 047BD79E9754BAED525EFE860760393E ' ,
     ' 호스트 ' : ' www.chinaooc.cn ' ,
     ' 원산지 ' : ' http://www.chinaooc.cn를 ' ,
     ' 에서 Pragma ' :' ,
     ' 리퍼러 ' : ' http://www.chinaooc.cn/front/show_index.htm ' ,
     ' 사용자 에이전트 ' : ' 모질라 / 5.0 (윈도우 NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML, 도마뱀 붙이 등) 크롬 / 63.0.3239.84 사파리 / 537.36 ' ,
    
    ' X-요청한와 ' : ' XMLHttpRequest 객체 ' ,
     ' 콘텐츠 유형 ' : ' 을 application / x-www-form-urlencoded를; 캐릭터 = UTF-8 "
    }

    
form_data = {
     ' pager.pageNumber ' : ' 2 ' ,
     ' pager.pageSize ' : ' 50 ' ,
     ' pager.keyword ' : ' ,
     ' 모드 ' : ' 페이지 ' 
    }

다음 아날로그 전송 요청 form_data 다른 페이지 데이터의 각각의 변화를 얻을 수있다 :

form_data [ ' pager.pageNumber는 ' ] = 
URL = " http://www.chinaooc.cn/front/show_index.htm ' 
응답 = requests.post (URL 데이터 = form_data 헤더 = 헤더)

도 3은, 정보의 분석 데이터를 얻는 반응에 반환.

 

다음과 같이 전체 코드는 다음과 같습니다

# !는 / usr / 빈 / ENV 파이썬

# - * - 코딩 : UTF-8 - * - 
수입 요청이
 가져올 에서 BS4의 수입 BeautifulSoup로

클래스 항목 :
     데프  __init__ (자기) :
        selfnum = 0
        self.school = '' 
        self.clazz = '' 
        self.url = '' 
헤더 = {
     ' 동의 ' : ' text / html과, * / *; Q = 0.01 ' ,
     ' 인코딩을 수락 ' : ' gzip을, 폐의 ' ,
     ' - 언어 수락 ' : ' 에서 zh-CN,에서 zh, Q = 0.9, 욕실, Q = 0.8, 코, Q = 0.7 ' ,
        
' 연결 ' : ' 연결 유지 ' , ' 콘텐츠 길이 ' : ' 61 ' , ' 쿠키 ' : ' 경로 = bd118df546101f9fcee5c1a58356a008; JSESSIONID = 047BD79E9754BAED525EFE860760393E ' , ' 호스트 ' : ' www.chinaooc.cn ' , ' 원산지 ' : ' http://www.chinaooc.cn를 ' , ' 에서 Pragma ' :' , ' 리퍼러 ' : ' http://www.chinaooc.cn/front/show_index.htm ' , ' 사용자 에이전트 ' : ' 모질라 / 5.0 (윈도우 NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML, 도마뱀 붙이 등) 크롬 / 63.0.3239.84 사파리 / 537.36 ' , ' X-요청한와 ' : ' XMLHttpRequest 객체 ' , ' 콘텐츠 유형 ' : ' 을 application / x-www-form-urlencoded를; 캐릭터 = UTF-8 " } form_data = { ' pager.pageNumber ' : ' 2 ' , ' pager.pageSize ' : ' 50 ' , ' pager.keyword ' : ' , ' 모드 ' : ' 페이지 ' } 시간 = 20 동안 시간 <34 : form_data [ ' pager.pageNumber는 ' ] = URL = " http://www.chinaooc.cn/front/show_index.htm ' 응답 = requests.post (URL 데이터 = form_data 헤더 = 헤더) 수프 = BeautifulSoup로 (response.content, " html.parser " ) tr_list = soup.find_all ( " TR " ) my_tr_list = tr_list [1 -1 ] 대한 TR my_tr_list : td_list = tr.find_all ( ' TD ' ) = 항목 () a.num = td_list [0] .contents [0] a.school = td_list [1 ] .contents [0] a.clazz = td_list [2] .contents [0] .replace ( ' \' ' , ' ' ) a.url = td_list [5] .find_all ( ' ' ) [0] [ " HREF " ] #에 이름 = 개방 (와 ' E / 데이터 / ' + ' [ ' + a.num + ' ] ' + A .school + ' ] ' + a.clazz + ' ] .html 중에서 ' , ' WB ' F 등) 입술 = requests.get (a.url) res.encoding = res.apparent_encoding f.write (res.content) 시간 = 1 시간 +

 

 

 

 

 

 

 

 

 

 

추천

출처www.cnblogs.com/PPWEI/p/11805247.html