1. 程式人生 > >python動態渲染頁面的爬取--使用Selenium

python動態渲染頁面的爬取--使用Selenium

2018426

10:05

一、安裝相關包和軟體

1、安裝Selenium包

Pip3 install Selenium

2、安裝chromedriver

訪問chromedriver映象站,下載對應版本的chromedriver,例如我的瀏覽器版本為

安裝的的chromdriver為v2.38(其支援的瀏覽器版本為v65-67,在其支援範圍內,下載後將其加入系統環境變數)

3、對之前的安裝進行測試

執行以下程式碼,如果能正確彈出chrome瀏覽器視窗,則正常(不正常的情況下重點檢查chromedriver版本)

from selenium import webdriver

browser=webdriver.Chrome()

二、Selenium的相關功能

1、初始化

from selenium import webdriver

browser=webdriver.Chrome()

該程式碼完成了瀏覽器物件的初始化,呼叫了Chrome瀏覽器(Selenium同樣支援其他瀏覽器,如browser=webdriver.Firefox(),browser=webdriver.Safari())

2、訪問頁面

browser.get('https://www.baidu.com') #執行了開啟百度網頁操作

print(browser.page_source) #輸出了網頁原始碼

Browser.close()#關閉了瀏覽器

3、查詢節點

這裡以淘寶網為例,檢視淘寶首頁原始碼

發現淘寶首頁搜尋框部分的id和name均為q

from selenium import webdriver

browser=webdriver.Chrome()

browser.get('https://www.taobao.com') #開啟淘寶網頁

input_first=browser.find_element_by_id('q') #根據id進行選擇

input_second=browser.find_element_by_css_selector('#q') #根據css選擇器進行選擇

input_third=browser.find_element_by_xpath('//*[@id="q"]') #Xpath進行獲取

print(input_first)

print(input_second)

print(input_third)

browser.close()

執行以上程式碼,輸出結果為

三種方式結果完全相同

4、簡單互動

From selenium import webdriver

Import time

browser=webdriver.Chrome()

browser.get('https://www.taobao.com') #開啟淘寶

input=browser.find_element_by_id('q') #找到id為q的節點,也就是搜尋框

input.send_keys('Ipad') #輸入ipad

time.sleep(1) #暫停1秒

input.clear() #清空之前輸入的內容

input.send_keys('MI6') #輸入MI 6

button=browser.find_element_by_class_name('btn-search') #找到搜尋按鈕

button.click() #點選搜尋

以上程式碼中包含了輸入,清空內容,點選三種常用動作

5、執行JavaScript

使用execute_script()方法可以執行JavaScript,從而實現API沒有實現的功能

例如以下程式碼

From selenium import webdriver

Import time

browser=webdriver.Chrome()

url=('https://www.zhihu.com/explore')

browser.get(url)

time.sleep(3)

browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')

browser.execute_script('alert("ToBottom")')

該程式碼打開了知乎的explore頁面,並且呼叫JavaScript語句window.scrollTo(0,document.body.scrollHeight)翻頁到頁面最底部,

然後呼叫alert("ToBottom")輸出To Bottom

6、獲取節點資訊(需要選選中節點)

獲取屬性(get_attribute())

Test= browser.find_element_by_id('p') #選中了id為P的節點

Print(test.get_attribute('class')) #輸出該節點的class

獲取文字(.text),獲取id(.id),獲取位置(.location),獲取標籤名(.tag_name),獲取大小(.size)

Test= browser.find_element_by_id('p') #選中了id為P的節點

Print(test.text)

7、延時等待(等待網頁加載出想要的內容,免得網速太慢跟不上節奏)

隱式等待(implicitly_wait())——如果沒有想要找的節點,等待固定長的一段時間,時間完了再查詢

from selenium import webdriver

browser=webdriver.Chrome()

browser.implicitly_wait(5)

browser.get('https://www.zhihu.com/explore')

input=browser.find_element_by_class_name('zu-top-question')

print(input)

隱式等待5秒,五秒後沒找到報錯

顯式等待——指定最長時間,該時間內找到就返回值,到了最長時間仍沒有找到就報錯

程式碼略

8、前進和後退

訪問多個網頁時,使用back()方法後退,forward()方法前進

from selenium import webdriver

browser=webdriver.Chrome()

browser.get('https://www.zhihu.com')

browser.get('https://www.mi.com')

browser.get('http://www.taobao.com')

browser.back()

browser.forward()

9、對cookie操作

from selenium import webdriver

browser=webdriver.Chrome()

browser.get('https://www.zhihu.com/explore')

print(browser.get_cookies()) #獲取cookie值

browser.add_cookie({'name':'test','domain':'www.zhihu.com','value':'germey'}) #新增cookie

print(browser.get_cookies())

browser.delete_all_cookies() #刪除所有cookie

print(browser.get_cookies())

8、對選項卡進行操作

 Ps:這篇文章主要是學習筆記,OneNote編寫過程中有自動首字母大寫,可能有大小寫錯誤。

筆記來源於書《Python3網路爬蟲開發實戰》,作者崔慶才,很不錯的一本書,侵刪