自從我的個人博客搭建起之後,每天的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打印出來,可以看到這個
資源路徑已經拿到了,好了,後面的就不用說了
爬蟲有風險,各位僅爲學習之用,千萬守住底線!