九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Python3網(wǎng)絡(luò)爬蟲課程 使用 selenium 爬取動態(tài)網(wǎng)頁
機器人在追你 2019-10-23 11:14:24

上一節(jié)中使用了分析 ajax 的方式抓取網(wǎng)頁,但是不是所有的動態(tài)網(wǎng)頁都是 ajax 生成的,有的是直接由 Javascript 生成的.
還有一些網(wǎng)頁可能它的 Ajax 接口有加密參數(shù),分析其 Ajax 接口非常困難.
為了解決這些問題,我們可以使用模擬瀏覽器的方式來進(jìn)行抓取,這樣,在瀏覽器中看到什么,我們就會抓到什么,可見即可爬,不用在管網(wǎng)頁內(nèi)部的 Javascript 用了什么算法渲染頁面,也不用管后來 ajax 接口有哪些參數(shù).
Python 提供了 Selenium 庫來模擬瀏覽器的運行.

Selenium 的使用.

Selenium 是一個自動化的測試工具,利用它可以驅(qū)動瀏覽器執(zhí)行特定的動作,如點擊\下拉等操作,同時還能獲取瀏覽器當(dāng)前呈現(xiàn)的頁面的源代碼.對于一些 Javascript 動態(tài)渲染的頁面來說,此種抓取方法非常有效.

準(zhǔn)備工作

本節(jié)將以 Chrome 瀏覽器為例來講解 Selenium 的用法,在開始本節(jié)課程之前,請按照第一節(jié)第二節(jié)的課程安裝并配置好 Chrome 瀏覽器,ChromeDriver 驅(qū)動,Selenium 庫等.

運行代碼后,會自動彈出以惡 Chrome 瀏覽器,瀏覽器會先跳轉(zhuǎn)到百度,然后搜索 Python,接著跳轉(zhuǎn)到搜索結(jié)果頁,然后關(guān)閉.

后臺也會打印出 HTML 代碼.

瀏覽器對象

Selenium 支持多種多樣的瀏覽器如 chrome、Firefox、Internet Explorer、Microsoft Edge 等,還支持 Android 等手機瀏覽器,支持 PhantomJs、ChromeHeadless 無頭瀏覽器等。 可以使用如下方式初始化 browser 對象。

訪問頁面

瀏覽器對象初始化完成后,我們可以使用 get()方法來請求網(wǎng)頁,參數(shù)傳入 URL 即可。

查找結(jié)點

Selenium 可以驅(qū)動瀏覽器完成各種操作,如填充表單、模擬點擊等。
比如我們想完成在某個文本框輸入的動作,首先得定位到文本框,而 Selenium 提供了一系列查找節(jié)點的方法。

單個節(jié)點

如果我們想找到淘寶的搜索框,首先得觀察淘寶網(wǎng)頁的源代碼:

我們發(fā)現(xiàn),這個 input 的 id 為 q,name 還是為 q。還有一些其他的屬性,比如 class 為 search-combobox-input 等,我們可以利用其這些屬性來定位這個節(jié)點。

我們使用了四種方式來定位 input 節(jié)點.

Selenium 一共提供了八種獲取單個節(jié)點的方法:

另外,Selenium 還提供了通用方法 find_element(),它需要傳入兩個參數(shù),查找方式 By 和值。如下:

多個節(jié)點

前面介紹的方法都只能查找單個節(jié)點,如果要查找多個節(jié)點,怎么用呢? 比如我們要查找這些節(jié)點.

我們可以這樣實現(xiàn):

運行結(jié)果如下:

和上面類似, Selenium 一共提供了八種方法定位多個節(jié)點:

Selenium 也提供了通用的獲取多個節(jié)點的方法,和上面類似的 find_elements

節(jié)點交互

Selenium 可以驅(qū)動瀏覽器來執(zhí)行一系列操作,如輸入文字、清空文字、點擊按鈕等。

動作鏈

Selenium 還支持鼠標(biāo)拖拽、鍵盤按鍵等操作,比如我們將一個節(jié)點從某個位置拖動到另一個位置。
比如我們想拖動這個元素:

我們先打開網(wǎng)頁,定位到源位置和目標(biāo)位置,接著聲明 ActionChains 對象,調(diào)用其方法實現(xiàn)拖拽操作。

執(zhí)行 javascript

如果我們用到了某些 Selenium API 未提供的功能的話,應(yīng)該怎么操作呢?
比如下拉進(jìn)度條,我們可以直接使用 execute_script()方法來執(zhí)行 Javascript。

獲取節(jié)點信息

我們前面演示過,通過 browser 對象的 page_source 屬性可以獲取到網(wǎng)頁的源代碼,接著我們可以使用解析庫如 beautifulsoup、pyquery 等來解析。當(dāng)然,Selenium 自身也提供了非常好用的選擇、獲取節(jié)點的方法。

獲取屬性

我們可以使用 get_attribute()方法來獲取節(jié)點的屬性,如下:

運行結(jié)果如下:

獲取文本

我們可以使用它的 text 屬性來獲取文本信息,類似于 beautifulsoup 的 get_text()方法,pyquery 的 text()方法。

運行結(jié)果如下:

獲取 id、位置、標(biāo)簽名和大小

webelement 節(jié)點還有一些其他屬性,如 id、location、tag_name、size 等,如下:

運行結(jié)果如下:

切換 Frame

網(wǎng)頁中有一種節(jié)點叫做 iframe,就是子 frame,相當(dāng)于頁面的子頁面,它的結(jié)構(gòu)和外層的網(wǎng)頁結(jié)構(gòu)是相同的。Selenium 打開頁面后,它默認(rèn)實在父 frame 中操作的,如果此時頁面中還有子 frame,它是不能獲取到子 frame 中的節(jié)點的,下面就看看 Selenium 怎么獲取子 frame 中的節(jié)點。

執(zhí)行結(jié)果如下:

延時等待

Selenium 中,get()方法會在網(wǎng)頁加載結(jié)束后停止執(zhí)行,此時如果獲取 page_source,可能獲取到的源碼并不是網(wǎng)頁完全加載結(jié)束后的源碼,某些節(jié)點可能在里面找不到。如某些頁面有額外的 Ajax 請求,那么我們就不一定能成功獲取到相關(guān)信息了。
Selenium 提供了兩種方式來解決這個問題: 一種是顯式等待,一種是隱式等待。

隱式等待

顯式等待

隱式等待只規(guī)定了一個固定的時間,而頁面的加載方式會受各方面因素的影響,所以這種方式并不好;所以我們可以用顯式等待來指定要查找的節(jié)點,然后指定一個最長的等待時間。

執(zhí)行結(jié)果如下:

關(guān)于等待條件,其實很多,比如判斷標(biāo)題內(nèi)容、判斷是否出現(xiàn)了某文字等等,下面列出一些常用的等待條件。

前進(jìn)和后退

我們的瀏覽器上有前進(jìn)和后退按鈕,Selenium 也提供了前進(jìn)和后退方法。

Cookies

Selenium 可以方便的對 Cookie 進(jìn)行操作,如獲取、添加、刪除、修改等。

運行結(jié)果如下:

選項卡管理

我們使用瀏覽器的時候會打開一個個選項卡,在 Selenium 中,我們也可以對選項卡進(jìn)行操作。

執(zhí)行結(jié)果如下:

異常處理

在 selenium 中難免會遇到一些異常,比如節(jié)點未找到,超時等。一旦出現(xiàn)異常程序便不會執(zhí)行了,如果我們寫個爬蟲,出現(xiàn)異常爬蟲就終止了,這是不行的,所以我們可以使用 try except 語句來捕獲各種異常。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用python/casperjs編寫終極爬蟲-Google Keyword Tool Scraper(selenium+python version)
小白學(xué) Python 爬蟲(9):爬蟲基礎(chǔ)
Google推出的爬蟲新神器:Pyppeteer,神擋殺神,佛擋殺佛!
Python爬蟲從入門到精通(五)動態(tài)網(wǎng)頁的挑戰(zhàn)
漫畫喵的100行Python代碼逆襲
就叫Spyfari吧?。鼣?shù)據(jù)爬取及可視化系列
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服