Webソースにデータが存在し、selenumを使用してデータを解析できない解決方法.

2010 ワード

  • 問題説明:selenumを使用して蘇寧易購入を取得する場合、携帯電話を検索する際、ブラウザに右クリックで価格などの情報が存在し、爬虫類の中でページを解析する際にデータ
  • を解析できない
  • 問題分析:
  • 蘇寧が携帯電話のロードページを検索する際に使用するのはajaxがロードした情報
  • である.
  • は、下にスライドするときも、リアルタイムで情報をロードし、
  • .
  • ページにアクセスすると、すべての情報はロードされず、ページが下にスクロールするにつれてajax取得情報
  • が送信され続ける.
  • 自分の爬虫類プログラムがデータを解析する際にページに全ての情報がロードされていないと、解析された情報が空になる場合があります
  • .
  • ソリューション:
  • jsコードを記述し、マウスのスクロール時間をシミュレートし、マウスが最下部にスクロールするまでデータの解析を開始する
  • .
  • ページスクロールを定義する関数
  • def scroll_to_bottom(driver):                       #        
        js = "return action=document.body.scrollHeight"	#          
        #              0
        height = 0
        #        
        new_height = driver.execute_script(js)
    
        while height < new_height:	#           ,      
            #            
            for i in range(height, new_height, 200):
                driver.execute_script('window.scrollTo(0, {})'.format(i))
                time.sleep(0.5)
            height = new_height				#      ,       。
            # time.sleep(random.random())
            new_height = driver.execute_script(js)	#         
    
  • ページ情報を取得する場合は、ページをスクロールする関数を呼び出すと、ページ全体の情報を完璧に取得できます.
  • def index_page(page):
        '''      :param page:   '''
        try:
            print('     ', page, ' ')
            url = 'https://search.suning.com/%s/'%(quote(KEYWORD))
            url = 'https://search.suning.com/%s/&iy=0&isNoResult=0&cp=%d'%(quote(KEYWORD), page)
            browser.get(url)	#     
            #    :      ,    
            # wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager li.item.active > span'), str(page)))
            wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#nextPage')))	#   ,          
            scroll_to_bottom(browser)           #        ,         
            time.sleep(3)
            get_products(page)                  #               
        except TimeoutException:
            index_page(page)