PhantomJS 是一款無界面的瀏覽器,其自動化操作流程和上述操作谷歌瀏覽器是一致的。由於是無界面的,為了能夠展示自動化操作流程,PhantomJS為用戶提供了一個截屏的功能,使用save_screenshot函數實現。
PhantomJS 驅動程序下載 鏈接: https://pan.baidu.com/s/13b_cjOTRGEzF8E7bJJz68A 提取碼: ujgj 復制這段內容后打開百度網盤手機App,操作更方便哦
實現代碼如下:
1 from selenium import webdriver 2 from time import sleep 3 4 # 創建一個瀏覽器對象,將驅動程序加載到瀏覽器中 5 pjs_obj = webdriver.PhantomJS(executable_path=r'C:\Users\13584\Desktop\驅動程序\phantomjs-2.1.1-windows\bin\phantomjs.exe') 6 # 瀏覽器對象執行get方法相當於手動打開對應的url網址 7 pjs_obj.get('https://www.baidu.com') 8 sleep(2) 9 # 使用開發者工具定位到要輸入的文本框,拿到該標簽的屬性 10 input_text = pjs_obj.find_element_by_id('kw') 11 # 在文本框中錄入關鍵字相當於手動輸入關鍵字 12 input_text.send_keys('python') 13 sleep(2) 14 # 使用開發者工具定位到要輸入的文本框,拿到該標簽的屬性 15 btn = pjs_obj.find_element_by_id('su') 16 # 相當於手動點擊按鈕 17 btn.click() 18 sleep(2) 19 # 這里可以進行別的代碼,比如獲取最終頁面的源碼數據 20 pjs_obj.quit()
重點:selenium+phantomjs 就是爬蟲終極解決方案:有些網站上的內容信息是通過動態加載js形成的,所以使用普通爬蟲程序無法回去動態加載的js內容。例如豆瓣電影中的電影信息是通過下拉操作動態加載更多的電影信息。
綜合操作:需求是盡可能多的爬取豆瓣網中的電影信息

1 from selenium import webdriver 2 from time import sleep 3 4 url = 'https://movie.douban.com/typerank?type_name=%E6%81%90%E6%80%96&type=20&interval_id=100:90&action=' 5 # 發起請求前,可以讓url表示的頁面動態加載出更多的數據 6 path = r'C:\Users\Administrator\ziliao\phantomjs-2.1.1-windows\bin\phantomjs.exe' 7 # 創建無界面的瀏覽器對象 8 bro = webdriver.PhantomJS(path) 9 # 發起url請求 10 bro.get(url) 11 sleep(3) 12 # 截圖 13 bro.save_screenshot('1.png') 14 15 # 執行js代碼(讓滾動條向下偏移n個像素(作用:動態加載了更多的電影信息)) 16 js = 'window.scrollTo(0,document.body.scrollHeight)' 17 bro.execute_script(js) # 該函數可以執行一組字符串形式的js代碼 18 sleep(2) 19 20 bro.execute_script(js) # 該函數可以執行一組字符串形式的js代碼 21 sleep(2) 22 bro.save_screenshot('2.png') 23 sleep(2) 24 # 使用爬蟲程序爬去當前url中的內容 25 html_source = bro.page_source # 該屬性可以獲取當前瀏覽器的當前頁的源碼(html) 26 with open('./source.html', 'w', encoding='utf-8') as fp: 27 fp.write(html_source) 28 bro.quit()