selenium點擊爬取豆瓣高分電影

  前言:當爬蟲爬取多頁時,大部分網站都是有下一頁,或者標記有總頁數,這讓我們可以通過查找下一頁的標籤獲取下一頁的內容,又或者得到總頁數,直接for循環url遍歷所有頁的內容,這兩種都可以得到你想爬取多頁的信息。

  那麼碰到動態加載的網頁,或者點擊出現,又或者滑動滾動條加載數據,這種網頁的話就需要用其他的方法找數據了

  1 解析JSON(好用,難度較大)

  2使用selenium  實現點擊及滑動滾動條加載數據!

  3 。。。。

 

這次我們使用selenium爬取豆瓣高評分電影,通過點擊實現加載數據!

1,打開要爬取的網站

 通過-->選電影-->豆瓣高分  得到想要的網頁

 

 

用代碼實現點擊效果

 2,找到需要的標籤

找到加載更多,並用代碼實現。

 3,開始爬取數據

1)導入所需要的包

 2)創建瀏覽器對象

這裏選擇爬取網頁的鏈接,電影名稱,以及前五的熱門評論,所以我們創建兩個瀏覽器對象(瀏覽器自選)

因爲網頁數據多少未知,所以我們選擇爬取多少數據

 3)爬取主頁數據(可以根據單機次數選擇爬取的多少頁數)

 

 4)爬取分頁

 5)爬蟲結束,問題 : 因爲這是個點擊加載的網頁所以我們不知有多少條數據!所以我們簡單規定一下所要爬取的數量

 以下爲完整代碼

# 爬取豆瓣電影網高分電影及熱門影評

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
# from selenium import webdriver
url = 'https://movie.douban.com/'

# 獲取電影詳情地址以及電影的名稱
def get_detail_url_and_movie_name(movie_count):
    # 定位 “選電影” ,
    driver_info.get(url)
    # class屬性查找
    WebDriverWait(driver_info, 10).until(lambda driver_info:driver_info.find_elements_by_css_selector('.nav-items a')[1]).click()
    # 定位 “豆瓣高分” 選項
    WebDriverWait(driver_info, 10).until(lambda driver_info:driver_info.find_elements_by_css_selector('.tag-list label')[4]).click()

    # 需要根據電影總數量,計算需要點擊幾次“加載更過”,下載電影信息
    # open_more變量用於記錄點擊次數
    open_more = int(movie_count)//20 - 1
    print(open_more)
    # 定位加載更多
    for x in range(1, open_more+1):
        WebDriverWait(driver_info, 10).until(lambda driver_info: driver_info.find_element_by_css_selector('.more')).click()
        # 提取電影名稱
        a_list = driver_info.find_elements_by_css_selector('.item')
        for a in a_list:
            print(u"電影地址:"+a.get_attribute('href'))
            print(u"電影名稱:"+a.text)
            # 根據電影詳情url下載熱門評論
            get_detail_info(a.get_attribute('href'))

def get_detail_info(url):
    driver_detail.get(url)
    div = WebDriverWait(driver_detail, 10).until(lambda driver_detail:driver_detail.find_element_by_css_selector('#hot-comments'))
    comments_list = div.find_elements_by_class_name('comment-item')
    # 獲取前5條熱門評論
    for comment in comments_list[:5]:
        # 在comment這個對象的基礎上繼續定位p標籤
        p = comment.find_element_by_tag_name('p').text
        print(u'熱門評論:'+p)


if __name__ == "__main__":
    options = webdriver.FirefoxOptions()
    options.set_headless()
    # 創建兩個瀏覽器對象,一個用於解析列表頁,一個用於解析詳情頁的熱門評論。
    driver_info = webdriver.Chrome(chrome_options=options)
    driver_detail = webdriver.Chrome(chrome_options=options)
    # 輸入需要下載的數量
    number = input('請輸入下載總數:')
    get_detail_url_and_movie_name(number)

 ok。關於點擊加載數據內容先學習着,關於通過selenium事件控制滾動條滑動來獲取數據還要繼續研究。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章