selenium + phantomJs

這篇文章應該寫在scrapy框架以前,在此做爲補充javascript

問題:如何對動態加載的頁面數據進行爬取?

解決方式有兩個:html

1.seleniumjava

2.phantomJsweb

selenium

簡介:三方庫,能夠實現讓瀏覽器完成自動化的操做。
chrome

環境搭建

注意:瀏覽器版本和驅動版本的對應關係表: http://www.javashuo.com/article/p-wlhinbws-eo.htmlmacos

若是谷歌瀏覽器版本比較高,那驅動也選擇高版本,多數狀況下沒有問題api

元素定位

1     #使用下面的方法,查找指定的元素進行操做便可
2     find_element_by_id            根據id找節點
3     find_elements_by_name         根據name找
4     find_elements_by_xpath        根據xpath查找
5     find_elements_by_tag_name     根據標籤名找
6     find_elements_by_class_name   根據class名字查找

示例

#編碼流程:
from selenium import webdriver
from time import sleep
#建立一個瀏覽器對象executable_path驅動的路徑
bro = webdriver.Chrome(executable_path='./chromedriver')
#get方法能夠指定一個url,讓瀏覽器進行請求
bro.get('https://www.baidu.com')
sleep(1)
#讓百度進行指定詞條的一個搜索
text = bro.find_element_by_id('kw')#定位到了text文本框
text.send_keys('人民幣') #send_keys表示向文本框中錄入指定內容
sleep(1)
button = bro.find_element_by_id('su')
button.click()#click表示的是點擊操做
sleep(3)
bro.quit()#關閉瀏覽器

執行javascript

from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')

 

phantomJs

phantomJs是無界面瀏覽器,其操做流程和上述谷歌同樣。瀏覽器

from selenium import webdriver

bro = webdriver.PhantomJS(executable_path='/Users/bobo/Desktop/路飛爬蟲授課/動態數據加載爬取/phantomjs-2.1.1-macosx/bin/phantomjs')

#打開瀏覽器
bro.get('https://www.baidu.com')

#截屏
bro.save_screenshot('./1.png')

text = bro.find_element_by_id('kw')#定位到了text文本框
text.send_keys('人民幣') #send_keys表示向文本框中錄入指定內容

bro.save_screenshot('./2.png')

bro.quit()

綜合案例

使用selenium+phantomJs處理頁面動態加載數據的爬取

  • 需求:獲取豆瓣電影中動態加載出更多電影詳情數據
from selenium import webdriver
from time import sleep
bro = webdriver.PhantomJS(executable_path='/Users/bobo/Desktop/路飛爬蟲授課/動態數據加載爬取/phantomjs-2.1.1-macosx/bin/phantomjs')
url = 'https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&type=24&interval_id=100:90&action='
bro.get(url)
sleep(1)
#截屏
bro.save_screenshot('./1.png')
#編寫js代碼:讓頁面中的滾輪向下滑動(底部)
js = 'window.scrollTo(0,document.body.scrollHeight)'
#如何讓瀏覽器對象執行js代碼
bro.execute_script(js)
sleep(1)
#截屏
bro.save_screenshot('./2.png')


bro.execute_script(js)
bro.save_screenshot('./3.png')
#獲取加載數據後的頁面:page_sourse獲取瀏覽器當前的頁面數據
page_text = bro.page_source

print(page_text)
相關文章
相關標籤/搜索