(7) selenium 모 의 브 라 우 저 를 통 해 JS 동적 콘 텐 츠 를 추출 합 니 다.

5140 단어
오늘 의 톱뉴스
왜 이렇게 기어 오 르 는 지 JS 동적 콘 텐 츠 를 보 세 요. selenium 이 브 라 우 저의 행동 을 모방 할 수 있 으 니 이 라 이브 러 리 로 웹 페이지 를 찾 는 것 도 간단 할 것 입 니 다.단점 은 아 날로 그 브 라 우 저 행동 인 만큼 제 이 슨 으로 직접 요청 하 는 것 보다 속도 가 훨씬 느리다 는 것 이다. 그러면 우 리 는 기어 오 르 기 코드 를 쓸 수 있다.여 기 는 css selecter 로 위 치 를 정 합 니 다.
>>> from selenium import webdriver
>>> driver = webdriver.PhantomJS()
>>> driver.get('http://www.toutiao.com/')
>>> for i in driver.find_elements_by_css_selector('#carouselList > ul > li> a > img'):
    print(i.get_attribute("src"))

    
http://p1.pstatp.com/origin/18a1001128770b4c8365
http://p3.pstatp.com/origin/178100075f23a040ecb5
http://p1.pstatp.com/origin/18a300112cfd26c2c6df
http://p9.pstatp.com/origin/18a5001110bbcae17326
http://p3.pstatp.com/origin/1781000760173eb00269
http://p3.pstatp.com/origin/17810007602775eb7d1d
>>> for i in driver.find_elements_by_css_selector('#carouselList > ul > li> a'):
    print(i.get_attribute("href"))

    
http://www.toutiao.com/group/6399973251997040897/
http://www.toutiao.com/group/6399911996251357442/
http://www.toutiao.com/group/6400082968694440194/
http://www.toutiao.com/group/6399868819300778242/
http://www.toutiao.com/group/6400084033762705666/
http://www.toutiao.com/group/6399915188623343874/

>>> for i in driver.find_elements_by_css_selector('#carouselList > ul > li > a > p'):
    print(i.text)

    



              37     


>>> len(driver.find_elements_by_css_selector('#carouselList > ul > li > a > p'))
6
>>> 

문제 가 생 겼 습 니 다. 그림 과 뉴스의 url 링크 는 성공 적 으로 찾 았 지만 제목 title 6 개 는 하나 밖 에 표시 되 지 않 았 습 니 다.몇 가지 포 지 셔 닝 방법 을 시 도 했 지만 결 과 는 여전히 같다.pagesource 가 Beautiful Soup 에 들 어가 면 괜 찮 습 니 다.시간 이 있 으 면 이어서 무슨 문제 가 생 겼 는 지 연구 해라.
2. 오늘 의 톱 미녀 사진 을 획득
이어서 상편 과 같이 오늘 의 톱 사진 을 얻 으 러 왔 다.
>>> from selenium import webdriver
>>> driver = webdriver.PhantomJS()
>>> driver.get('http://www.toutiao.com/search/?keyword=%E7%BE%8E%E5%A5%B3')
>>> a = driver.find_elements_by_class_name('J_title')
>>> len(a)
20
>>> for i in a:
    print(i.text)

    
    ,    ,    
             
    ,     
  :            
              
          
                           
       ,         
    ——            
         
    :            
      
17              
「    」            
  :           ,     ?
  :       
    
T    :90      
    ,        
      
>>> b =driver.find_elements_by_class_name('img-wrap')
>>> for i in b:
    print(i.get_attribute('href'))

    
http://www.toutiao.com/group/6399967413135884545/
http://www.toutiao.com/group/6399875937064272129/
http://www.toutiao.com/group/6399511749808095746/
http://www.toutiao.com/group/6399741308898132225/
http://www.toutiao.com/group/6400243707849244930/
http://www.toutiao.com/group/6400238927080390914/
http://www.toutiao.com/group/6399718234816741633/
http://www.toutiao.com/group/6399832980781629697/
http://www.toutiao.com/group/6399866594214904066/
http://www.toutiao.com/group/6399716443810496769/
http://www.toutiao.com/group/6400085128462516482/
http://www.toutiao.com/group/6400180716161253633/
http://www.toutiao.com/group/6399949700431003905/
http://www.toutiao.com/group/6399936693873737986/
http://www.toutiao.com/group/6399757089493025025/
http://www.toutiao.com/group/6399803425404436738/
http://www.toutiao.com/group/6399716046782431489/
http://www.toutiao.com/group/6399712965301715202/
http://www.toutiao.com/group/6399724047525150977/
http://www.toutiao.com/group/6399723310598799618/

그림 내용 의 링크 는 쉽게 얻 을 수 있 습 니 다. 이어서 우 리 는 모든 웹 페이지 에 들 어가 서 안의 그림 다운로드 링크 를 얻 으 면 됩 니 다.셀 레 니 엄 으로 모든 홈 페이지 에 들 어가 그림 을 다운로드 하면 효율 이 느 린 것 이 분명 하 다. 차라리 requests 를 사용 하 자.이 작은 일 은 여기에서 더 이상 반복 되 지 않 는 다. 앞에서 우 리 는 정적 홈 페이지 를 오 르 는 것 은 이미 많은 것 을 했다.우 리 는 이제 다음 의 또 다른 중요 한 문 제 를 연구 하 는데, 바로 어떻게 더 많은 이미지 웹 링크 를 얻 느 냐 하 는 것 이다.이 사이트 에 서 는 브 라 우 저 를 끝까지 끌 어 당 겨 야 더 많은 그림 을 표시 할 수 있다.어떻게
#     
>>> driver.execute_script("window.scrollBy(0,document.body.scrollTop=0)","")
#     
>>> driver.execute_script("window.scrollBy(0,document.body.scrollHeight)","")
>>> driver.execute_script("window.scrollBy(0,document.body.scrollHeight=10000)","")
>>> driver.execute_script("window.scrollBy(0,document.body.scrollTop)","")
>>> import time
>>> time.sleep(3)
>>> b = driver.find_elements_by_class_name('J_title')
>>> len(b)
120

이상 은 execute - script 을 통 해 js 스 크 립 트 작업 을 수행 합 니 다.Action Chains 를 통 해 마우스 조작 을 모 의 할 수도 있다.그러면 드 롭 다운 할 때마다 20 개의 사진 주 소 를 얻 을 수 있다.그래서 전체적인 생각 은 다음 과 같다.
(1) selenium 아 날로 그 브 라 우 저 로 웹 페이지 에 로그 인
(2) 아 날로 그 브 라 우 저 에서 페이지 를 끝까지 끌 어 내리 고 더 많은 그림 주 소 를 계속 불 러 옵 니 다.
(3) selenium 에서 요 소 를 찾 아 제목 과 사진 주 소 를 찾 습 니 다.
(4) 각 그림 사이트 에 requests 요청 으로 모든 그림 다운로드 링크 추출
(5) 사진 다운로드
어렵 지 않 아 요. 코드 쓰 는 게 귀찮아 요.

좋은 웹페이지 즐겨찾기