天天看點

python使用selenium擷取登陸後的界面源碼_Python爬蟲入門實戰七:使用Selenium--以抓取QQ空間好友說說為例...

前面我們接觸到的,都是使用requests+BeautifulSoup組合對靜态網頁進行請求和資料解析,若是JS生成的内容,也介紹了通過尋找API借口來擷取資料。

但是有的時候,網頁資料由JS生成,API借口又死活找不着或者是API借口位址随機變換,時間不等人。那就隻能使用Selenium了。

一、Selenium簡介

Selenium是一個用于Web應用的功能自動化測試工具,Selenium 直接運作在浏覽器中,就像真正的使用者在操作一樣。

由于這個性質,Selenium也是一個強大的網絡資料采集工具,其可以讓浏覽器自動加載頁面,擷取需要的資料,甚至頁面截圖,或者是判斷網站上某些動作是否發生。

Selenium自己不帶浏覽器,需要配合第三方浏覽器來使用。支援的浏覽器有Chrome、Firefox、IE、Phantomjs等。

如果使用Chrome、FireFox或IE,我們可以看得到一個浏覽器的視窗被打開、打開網站、然後執行代碼中的操作。

但是,讓程式在背景中運作更符合我們爬蟲的氣質,是以自己多使用Phantomjs作為浏覽器載體,本篇文章也以Phantomjs作介紹

Phantomjs是一個“無頭”浏覽器,也就是沒有界面的浏覽器,但是功能與普通的浏覽器無異。

二、在Python中使用Selenium擷取QQ空間好友說說

之前使用pip安裝好了selenium,直接在代碼中import即可。

下面我們以一個實際的例子——擷取一個QQ空間好友的說說資訊,來簡單講解一下Selenium+Phantomjs的使用。

我們需要爬取的頁面時這樣的:

python使用selenium擷取登陸後的界面源碼_Python爬蟲入門實戰七:使用Selenium--以抓取QQ空間好友說說為例...

QQ空間好友說說的連結為:http://user.qzone.qq.com/{好友QQ号}/311

我們抓取他發的說說的時間和内容。

依舊先上代碼:

from 
           

擷取到的部分資料截圖如下:

python使用selenium擷取登陸後的界面源碼_Python爬蟲入門實戰七:使用Selenium--以抓取QQ空間好友說說為例...

接下來我們通過講解代碼,稍微了解一下Selenium的使用

三、代碼簡析

1.照例,導入需要使用的子產品:

from 
           

2.使用Selenium的webdriver執行個體化一個浏覽器對象,在這裡使用Phantomjs:

driver = webdriver.PhantomJS(executable_path="D:phantomjs.exe")
           

3.設定Phantomjs視窗最大化:

driver
           

4.主函數部分

使用get()方法打開待抓取的URL:

driver.get('http://user.qzone.qq.com/{}/311'.format(qq))
           

等待5秒後,判斷頁面是否需要登入,通過查找頁面是否有相應的DIV的id來判斷:

try
           

如果頁面存在登入的DIV,則模拟登入:

driver
           

接着,判斷好友空間是否設定了權限,通過判斷是否存在元素ID:QM_OwnerInfo_Icon

try
           

如果有權限能夠通路到說說頁面,那麼定位元素和資料,并解析:

if 
           

除了在Selenium中解析資料,我們還可以将目前頁面儲存為源碼,再使用BeautifulSoup來解析:

pages = driver.page_source
soup = BeautifulSoup(pages,'lxml')
           

最後,我們嘗試一下擷取Cookie,使用get_cookies():

cookie 
           

另外,再介紹兩個Selenium的常用方法:

儲存螢幕截圖:

driver.save_screenshot('儲存的檔案路徑及檔案名')
           

執行JS腳本:

driver
           

對于Selenium更加詳細的操作和使用,推薦一本書《selenium webdriver(python)第三版》網上可以搜尋到。