超級簡單的入門
最近閑的無聊,有時間學習了下JAVA下的 Selenium 爬取頁面信息已卸,簡單做下分享氓轰。
首先請出度娘為第一次接觸Selenium的同學科普下庞呕。
為什么個人比較喜歡Selenium:
1.對抓取網頁內動態(tài)數(shù)據(jù)信息有著不錯的表現(xiàn)
2.頁面中存在大量JS交互后的數(shù)據(jù)表現(xiàn)優(yōu)秀(個人覺得性能超過了HttpClient)峰伙。
下面我們簡單做個例子看一下:
第一步建議本地安裝個Chromechrome歷史版本獲取
第二步進行chromedriver下載chromedriver傳送門?注意chromedriver的版本一定與chrome版本一致疗疟,
第三步將下載后的chromediver移動至/usr/local/bin/ 目錄下打開終端輸入chromediver 如果出現(xiàn)如下頁面說明你的chrome安裝成功
第四步因為在java下運行,我是用的是pom導入Selenium 至當前工程
我們就可以開始入門級別的selenium使用了瞳氓。
寫一個簡單的不能再簡單的H5頁面
<div id = "AA"> aaa </div>? ? ?設置個標簽
可以在idea下本地起個anywhere的本地服務策彤。
WebDriver driver = new ChromeDriver();
driver.manage().window().setSize(new Dimension(1920,1080)); //設置彈出瀏覽器尺寸
driver.get(url); // 打開指定的網站輸入指定網站鏈接
WebElement PKey = driver.findElement(By.id("AA")); 對網站中的某個標簽上的元素進行爬取
String StrPKey = PKey.getText();?
System.out.println(StrPKey);
driver.close();//關閉網頁?
在控制臺上將輸出如下:aaa
以上是selenium 超級簡單的入門實踐,當然如果這個aaa使用過復雜JS計算得來的匣摘,也可以通過同樣方法獲取店诗。
破解簡單的反爬
? ? ? ?有爬蟲就有反爬,想想也挺有意思恋沃,很多大廠都做了必搞,針對于selenium的反爬機制,當然每個網頁各自不同的應對方法囊咏,比如通過獲取當前頁的window.navigator.webdriver 通過判斷返回 True還是False來獲取是否是通過爬蟲進行請求的恕洲。
if(True){
爬蟲還想獲取我的數(shù)據(jù)?
}else{
不是爬蟲
}
? ? ? 聽說很多JS爬蟲可以成功繞過這個反爬機制(例如 JS爬蟲?phontomjs梅割,感興趣的同學可以了解下)霜第,感興趣的同學可以了解下,但對我我們這些入門級小白爬蟲門檻就上升了一個等級户辞,那我們如何破解此類反爬機制呢泌类?
1.將chrome 版本降到75以下
2.重新配置對應的chromedriver 方法和之前類似
3.配置ChromeOptions
ChromeOptions options =new ChromeOptions();
options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
WebDriver driver = new ChromeDriver(options);?
? ? ? ? 此時就可以繼續(xù)開心的使用Selenium了。當然了如果您使用的是強大的phontomjs可以忽略當前章節(jié)底燎,因為其加載原理不同刃榨,不會被簡單的反爬機制發(fā)現(xiàn)。
攜程技術分享?這篇文章對我啟發(fā)很大