seleniumを使ってajaxロードのページ情報を取得します.

10263 ワード

seleniumを使ってajaxロードのページ情報を取得します.
  • 実験サイト:豆瓣映画シナリオ
  • は主にモジュールを使用します.
  • selenium
  • lxml(pip install lxml)
  • 主要な構想:seleniumを使って、豆瓣ページに直接訪問するのは無理です.seleniumにjsスクリプトのスライドバーを実行させてこそ、豆瓣ページをリフレッシュさせて、必要な内容を得ることができます.
  • コードは以下の通りです.
    """
      selenium           
    """
    from selenium import webdriver
    from lxml import etree
    import time
    import json
    
    class DouBanMovieSelenium:
        """
            
        """
        def __init__(self):
            self.url = "https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action="
            self.driver = webdriver.Chrome("F:\python   \chromedriver.exe")
    
    
        def load_page(self):
            """
                
            """
            self.driver.get(self.url)
    
            time.sleep(3)
    
            #     1000  
            js = "window.scrollBy(0, 1000)"
            #          
            # js = "window.scrollTo(0,document.body.scrollHeight)" 
            self.driver.execute_script(js)
    
            time.sleep(3)
    
            # self.driver.save_screenshot("1.jpg")
            # time.sleep(1)
        
            self.driver.execute_script(js)
            time.sleep(3)
            
            # self.driver.save_screenshot("2.jpg")
    
            self.parse_page(self.driver.page_source)
    
    
        def parse_page(self, html):
            """
                  ,      
            html:    html  
            """
            text = etree.HTML(html)
            node_list = text.xpath('//div[contains(@class,"movie-list-item")]')
            # print(len(node_list))
    
            movie_list = []
            for node in node_list:
                title = node.xpath('.//div[@class="movie-name"]/span[1]/a')[0].text
                # rank =  node.xpath('.//div[@class="movie-name"]/span[3]')[0].text
                rank = node.xpath('.//span[@class="rank-num"]')[0].text
                rating = node.xpath(".//span[@class='rating_num']")[0].text
    
                movie_info = {
                    'title': title,
                    "rank": rank,
                    "rating": rating,
                }
                movie_list.append(movie_info)
    
            self.write_info(movie_list)
    
    
        def write_info(self, movie):
            """
                          
            movie:        
            """
            with open("../text/doubanmovie2.json", 'w', encoding="utf-8") as f:
                f.write(json.dumps(movie, ensure_ascii=False))
            
            return "success"
    
    
        def close(self):
            time.sleep(2)
            self.driver.quit()
    
    
    if __name__ == "__main__":
        db = DouBanMovieSelenium()
        db.load_page()
        db.close()
    
    締め括りをつける
  • selenium+chromeを使って操作の内容を直感的に見ることができます.爬虫を使って登るより直感的に見ることができます.