Seleniumd介紹
在寫Python爬蟲的時候,最麻煩的不是那些海量的靜態網站,而是那些通過JavaScript獲取數據的站點。Python本身對js的支持不好,所以就有良心的開發者來做貢獻了,這就是Selenium,他本身可以模擬真實的瀏覽器,瀏覽器所具有的功能他都有哦,加載js更是小菜了。
Selenium的安裝:
使用pip命令,你可以像下面這樣安裝 selenium:
pip install selenium
大家可以參考一下中文文檔。
瀏覽器的選擇:
在寫爬蟲的時候,用到最多的就是Selenium的Webdriver,當然,webdriver也不可能支持所有的瀏覽器,讓我們看看他支持哪些瀏覽器吧:
1 from selenium import webdriver 2 help(webdriver) 3 4 PACKAGE CONTENTS 5 android (package) 6 blackberry (package) 7 chrome (package) 8 common (package) 9 edge (package) 10 firefox (package) 11 ie (package) 12 opera (package) 13 phantomjs (package) 14 remote (package) 15 safari (package) 16 support (package) 17
可以看出支持的瀏覽器還是比較豐富的,移動端到電腦端應由具有。
然而,個人覺得在寫爬蟲的時候,更推薦使用PhantomJS:
PhantomJS介紹:
(1)一個基於webkit內核的無頭瀏覽器,即沒有UI界面,即它就是一個瀏覽器,只是其內的點擊、翻頁等人為相關操作需要程序設計實現。
(2)提供JavaScript API接口,即通過編寫Js程序可以直接與webkit內核交互,在此之上可以結合Java語言等,通過java調用js等相關操作,從而解決了以前c/c++才能比較好的基於webkit開發優質采集器的限制。
(3)提供windows、Linux、mac等不同os的安裝使用包,也就是說可以在不同平台上二次開發采集項目或是自動項目測試等工作。
PhantomJS全面支持各種原生的Web標准:DOM處理、CSS選擇器、JSON、Canvas和SVG。最重要的是他是一個沒有GUI的程序,也就意味着他可以省去大量的加載圖形界面的時間。有人曾經測試過,使用Selenium模塊調用上述瀏覽器,PhantomJS的速度是第一名哦~~~~~第二和第三是chrome和ie。
PhantomJS的安裝:
這里有一點要說明,PhantomJS並不是一個Python模塊,他是一個獨立的,第三方軟件,這也就意味着我們不能簡單的使用pip工具安裝啦。
Mac下安裝PhantomJS:
這里我們只要使用brew工具就能安裝上PhantomJs了
brew install phantomjs
linux下安裝PhantomJS:
linux下有很多第三方發型版本:比較常用的一般是 Ubuntu、centos等等。這些發行版也都有自己強大的軟件管理倉庫:apt、yum等等
那么安裝起來也就超方便了:
# ubuntu apt-get install phantomjs # centos yum install phantomjs
win下安裝PhantomJS:
雖然win下沒有上述的方便的安裝方式,但是我們可以去官網下載安裝包,然后在安裝,地址在這里:Download | PhantomJS
使用Selenium&PhantomJS抓取數據:
下面我們介紹一個簡單到抓取百度的例子
1 from selenium import webdriver 2 #我們首先導入了Selenium里的webdriver, 3 browser = webdriver.PhantomJS() 4 #然后建立一個PhantomJS的瀏覽器對象, 5 url = 'https://www.baidu.com' 6 browser.get(url) 7 #最后我們通過get方法,打開了百度的首頁。 8 browser.implicitly_wait(3)
這里要說一下 implicitly_wait():
瀏覽器解釋JS腳本是需要時間的,但實際上這個時間並不好確定,如果我們手動設定時間間隔的話,設置多了浪費時間,設置少了又會丟失數據implictly_wait函數則完美解決了這個問題,給他一個時間參數,他會只能等待,當js完全解釋完畢就會自動執行下一步。
找到搜索框和搜索按鈕:
在第一步的時候,我們其實就已經把百度首頁的數據爬到本地了,剩下當然是數據的篩選,這里推薦用Selenium自帶函數來完成,Selenium 本身給出了相關函數來定位有效數據的位置。
# 找到第一個匹配的元素 find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_element_by_tag_name find_element_by_class_name find_element_by_css_selector # 一次查找多個元素 (這些方法會返回一個list列表): find_elements_by_name find_elements_by_xpath find_elements_by_link_text find_elements_by_partial_link_text find_elements_by_tag_name find_elements_by_class_name find_elements_by_css_selector
相信之前學習了bs4和Xpath之后,用這個完全沒有什么壓力吧,看函數名就應該知道是具體通過什么來定位數據了。上面我們只是打開了百度而已,在使用真實瀏覽器的時候是不是要先在文本框里輸入關鍵詞然后在按搜索按鈕呢?
在PhantomJS里我們也需要這樣做:
1 text = browser.find_element_by_id('kw') 2 #首先調用find_element_by_id()方法找到了text欄的位置, 3 4 text.clear() 5 6 text.send_keys('python') 7 #然后通過send_keys()方法來輸入關鍵字 8 9 print(browser.title) 10 #輸出:百度一下,你就知道 11 12 button = browser.find_element_by_id('su') 13 #接着還是通過find_element_by_id()方法找到提按鈕, 14 15 button.submit() 16 #最后我們通過.submint()方法來模擬點擊,發送搜索請求
用chrome開發者工具可以快速定位到各個element的位置:
篩選答案
1 results = browser.find_elements_by_class_name('t') 2 #通過browser.find_elements_by_class_name()方法定位到搜索結果,返回一個element類型的列表 3 #再通過element.text 和 element.get_attribute()方法來獲取我們需要的數據。 4 for result in results: 5 print('標題:{} 超鏈接:{}'.format(result.text,result.find_element_by_tag_name('a').get_attribute('href')))
下面看一下運行結果
1 標題:Welcome to Python.org官網 超鏈接:http://www.baidu.com/link?url=nLxm0hnvH9HcezbpHRuDVS5BVAyuR91xzNhFE4Qy9_a 2 標題:Python_百度百科 超鏈接:http://www.baidu.com/link?url=jUTKRqQ91sf2liPtZlVHVr82UNuP12PPKdll2ZNQ9-kifb4GeLDG3SlV9NuCvI2BWUSqG8coNRzsYvlYusYuJK 3 標題:Download Python | Python.org 超鏈接:http://www.baidu.com/link?url=PP6oQw_LHvRmuc8wl4c-BFn_GouagfYU-IY0HqdUF88ikq5zriz1JNManttiFFuX 4 標題:Python教程 - 廖雪峰的官方網站 超鏈接:http://www.baidu.com/link?url=89Q6mTNkcq1NdeDubb3jgq0Du3OX8hUcNt90fyhJ6nMWXfAPyJUZ7Vg-b9CSpaxdpOxGErzWzASuq4E96mHnxlZsLi6wieiEqtEk8UsJqjnfeWfhrLz_lWrtuPkWjXAo 5 標題:Mac版 Python最新官方版下載_百度軟件中心 超鏈接:http://www.baidu.com/link?url=xkHduP0KLXEL1jvFt2ftD8LXgRG0gBop2ojePLkZr5s7WvcBZ1nYxU2sPjedwQGabjC_v89VUoYuKSzy8aI-Ja 6 標題:python吧_百度貼吧 超鏈接:http://www.baidu.com/link?url=N5vRlEUf6OWIyclfhkWz5r38A-kUhT40K7VTNIwLdR3zwNF8hFKbtsQtaRbCa_p0uPPwFaKRgMN0zvgvTMm6rK 7 標題:玩蛇網 - Python教程學習與Python資源分享平台 超鏈接:http://www.baidu.com/link?url=0AK0LLSw35u5qIfXy7O9n3AcgWy8A4MaR55Ia2LyVQjmxivy_Q_UY_khKCWJp7iG 8 標題:Python教程_百度文庫 超鏈接:http://www.baidu.com/link?url=okXMxRDGk1j6Ni5Il_hwNz8RC7C79XtAo76NptBIUF-GNvEKwpR-vKCAjY9DrBugt2pFZ87UiLlKcrhdgNsGjQwdLXbPc36ACgSok0PEKOq 9 標題:Python - 伯樂在線 超鏈接:http://www.baidu.com/link?url=kBa0MYj70CsPtPIpCikAxJJol_b_JHtSGD9iot7-hrX2eBNH_WW2r-PoaJf_nFhp