利用selenium爬蟲(chóng)抓取數(shù)據(jù)的基礎(chǔ)教程
寫(xiě)在前面
本來(lái)這篇文章該幾個(gè)月前寫(xiě)的,后來(lái)忙著忙著就給忘記了。
ps:事多有時(shí)候反倒會(huì)耽誤事。
幾個(gè)月前,記得群里一朋友說(shuō)想用selenium去爬數(shù)據(jù),關(guān)于爬數(shù)據(jù),一般是模擬訪(fǎng)問(wèn)某些固定網(wǎng)站,將自己關(guān)注的信息進(jìn)行爬取,然后再將爬出的數(shù)據(jù)進(jìn)行處理。
他的需求是將文章直接導(dǎo)入到富文本編輯器去發(fā)布,其實(shí)這也是爬蟲(chóng)中的一種。
其實(shí)這也并不難,就是UI自動(dòng)化的過(guò)程,下面讓我們開(kāi)始吧。
準(zhǔn)備工具/原料
1、java語(yǔ)言
2、IDEA開(kāi)發(fā)工具
3、jdk1.8
4、selenium-server-standalone(3.0以上版本)
步驟
1、分解需求:
需求重點(diǎn)主要是要保證原文格式樣式都保留:
將要爬取文章,全選并復(fù)制
將復(fù)制后的文本,粘貼到富文本編輯器中即可
2、代碼實(shí)現(xiàn)思路:
鍵盤(pán)事件模擬CTRL+A全選
鍵盤(pán)事件模擬CTRL+C復(fù)制
鍵盤(pán)事件模擬CTRL+V粘貼
3、實(shí)例代碼
import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import java.awt.*; import java.awt.event.KeyEvent; import java.util.concurrent.TimeUnit; /** * @author rongrong * Selenium模擬訪(fǎng)問(wèn)網(wǎng)站爬蟲(chóng)操作代碼示例 */ public class Demo { private static WebDriver driver; static final int MAX_TIMEOUT_IN_SECONDS = 5; @BeforeClass public static void setUpBeforeClass() throws Exception { driver = new ChromeDriver(); String url = "https://temai.snssdk.com/article/feed/index?id=6675245569071383053&subscribe=5501679303&source_type=28&content_type=1&create_user_id=34013&adid=__AID__&tt_group_id=6675245569071383053"; driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(MAX_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS); driver.get(url); } @AfterClass public static void tearDownAfterClass() throws Exception { if (driver != null) { System.out.println("運(yùn)行結(jié)束!"); driver.quit(); } } @Test public void test() throws InterruptedException { Robot robot = null; try { robot = new Robot(); } catch (AWTException e1) { e1.printStackTrace(); } robot.keyPress(KeyEvent.VK_CONTROL); robot.keyPress(KeyEvent.VK_A); robot.keyRelease(KeyEvent.VK_A); Thread.sleep(2000); robot.keyPress(KeyEvent.VK_C); robot.keyRelease(KeyEvent.VK_C); robot.keyRelease(KeyEvent.VK_CONTROL); driver.get("https://ueditor.baidu.com/website/onlinedemo.html"); Thread.sleep(2000); driver.switchTo().frame(0); driver.findElement(By.tagName("body")).click(); robot.keyPress(KeyEvent.VK_CONTROL); robot.keyPress(KeyEvent.VK_V); robot.keyRelease(KeyEvent.VK_V); robot.keyRelease(KeyEvent.VK_CONTROL); Thread.sleep(2000); } }
寫(xiě)在后面
筆者并不是特別建議使用selenium做爬蟲(chóng),原因如下:
速度慢:
每次運(yùn)行爬蟲(chóng)都要打開(kāi)一個(gè)瀏覽器,初始化還需要加載圖片、JS渲染等等一大堆東西;
占用資源太多:
有人說(shuō),把換成無(wú)頭瀏覽器,原理都是一樣的,都是打開(kāi)瀏覽器,而且很多網(wǎng)站會(huì)驗(yàn)證參數(shù),如果對(duì)方看到你惡意請(qǐng)求訪(fǎng)問(wèn),會(huì)辦了你的請(qǐng)求,然后你又要考慮更換請(qǐng)求頭的事情,事情復(fù)雜程度不知道多了多少,還得去改代碼,麻煩死了。
對(duì)網(wǎng)絡(luò)的要求會(huì)更高:
加載了很多可能對(duì)您沒(méi)有價(jià)值的補(bǔ)充文件(如css,js和圖像文件)。 與真正需要的資源(使用單獨(dú)的HTTP請(qǐng)求)相比,這可能會(huì)產(chǎn)生更多的流量。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Selenium python時(shí)間控件輸入問(wèn)題解決方案
這篇文章主要介紹了Selenium python時(shí)間控件輸入問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07Pyqt5實(shí)現(xiàn)英文學(xué)習(xí)詞典
這篇文章主要為大家詳細(xì)介紹了Pyqt5實(shí)現(xiàn)英文學(xué)習(xí)詞典的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06python2.7使用plotly繪制本地散點(diǎn)圖和折線(xiàn)圖
這篇文章主要為大家詳細(xì)介紹了python2.7使用plotly繪制本地散點(diǎn)圖和折線(xiàn)圖實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04Python中的 any() 函數(shù)和 all() 函數(shù)
這篇文章主要介紹了Python中的 any() 函數(shù)和 all() 函數(shù),文章基于Python的相關(guān)資料展開(kāi)對(duì) any 和 all() 函數(shù)的語(yǔ)法詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04python順序的讀取文件夾下名稱(chēng)有序的文件方法
今天小編就為大家分享一篇python順序的讀取文件夾下名稱(chēng)有序的文件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Python?Type?Hints?學(xué)習(xí)之從入門(mén)到實(shí)踐
Type?Hints(類(lèi)型注解)進(jìn)一步強(qiáng)化了Python是一門(mén)強(qiáng)類(lèi)型語(yǔ)言的特性,它在?Python3.5?中第一次被引入。使用Type?Hints可以讓我們編寫(xiě)出帶有類(lèi)型的Python代碼,本文將詳細(xì)介紹一下Type?Hints,感興趣的小伙伴可以關(guān)注一下2021-11-11python @classmethod 的使用場(chǎng)合詳解
這篇文章主要介紹了python @classmethod 的使用場(chǎng)合詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08