使用Selenium爬取js渲染的頁面

自從我的個人博客搭建起之後,每天的nginx日誌裏面都有很多來自爬蟲的請求,大多都是 /index.php

/login.php   /admin.php等等之類的請求.據說互聯網50%以上的流量都是來自爬蟲,

以前前後端未分離的時候,頁面都是服務端渲染好後返回給客戶端,這樣的頁面就很好爬取,模擬一個http請求就能獲取到後端的資源.

隨着AJAX技術不斷的普及,以及現在的angular和React,Vue等框架的出現, 頁面渲染被轉移到客戶端了,一個爬蟲請求過去,只能拿到最基本的html,資源請求和頁面渲染全是js來完成的,這種情況怎麼辦呢?俗話說一物降一物,有反爬就有反反爬(哈哈),下面介紹一個工具Selenium,專治這種情況.廢話不多說了,上代碼:

一,添加Selenium依賴

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.33.0</version>
    </dependency>

二,下載一個chrome驅動

很多下載chrome驅動的網站都不能用了;推薦在淘寶的鏡像倉庫下載:

http://npm.taobao.org/mirrors/chromedriver/  注意版本,我下載的是73.0.3683.68/

三,爬蟲代碼

以西瓜視頻爲例,西瓜視頻使用的是自己的一個播放器,

 紅框裏面的資源路徑,就是視頻的播放地址,是用js渲染進去的

下面的代碼,第一行是先設置環境變量,讓Selenium能找到chrome的驅動,不然會報錯

  public static void main(String[] args) throws Exception {
        System.getProperties().setProperty("webdriver.chrome.driver", "D:\\chromeDriver\\chromedriver.exe");
        ChromeDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.ixigua.com/i6707783341539590659/");

        WebElement element = webDriver.findElement(By.xpath("/html"));
        System.out.println(element.getAttribute("outerHTML"));
        webDriver.close();

    }

運行代碼,會彈出一個窗口,因爲Selenium會創建一個chrome進程,相當於本地打開了一個谷歌瀏覽器,然後將拿到的html打印出來,可以看到這個

資源路徑已經拿到了,好了,後面的就不用說了

爬蟲有風險,各位僅爲學習之用,千萬守住底線!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章