利用selenium爬蟲抓取數(shù)據(jù)的基礎(chǔ)教程
寫在前面
本來這篇文章該幾個(gè)月前寫的,后來忙著忙著就給忘記了。
ps:事多有時(shí)候反倒會耽誤事。
幾個(gè)月前,記得群里一朋友說想用selenium去爬數(shù)據(jù),關(guān)于爬數(shù)據(jù),一般是模擬訪問某些固定網(wǎng)站,將自己關(guān)注的信息進(jìn)行爬取,然后再將爬出的數(shù)據(jù)進(jìn)行處理。
他的需求是將文章直接導(dǎo)入到富文本編輯器去發(fā)布,其實(shí)這也是爬蟲中的一種。
其實(shí)這也并不難,就是UI自動化的過程,下面讓我們開始吧。
準(zhǔn)備工具/原料
1、java語言
2、IDEA開發(fā)工具
3、jdk1.8
4、selenium-server-standalone(3.0以上版本)
步驟
1、分解需求:
需求重點(diǎn)主要是要保證原文格式樣式都保留:
將要爬取文章,全選并復(fù)制
將復(fù)制后的文本,粘貼到富文本編輯器中即可
2、代碼實(shí)現(xiàn)思路:
鍵盤事件模擬CTRL+A全選
鍵盤事件模擬CTRL+C復(fù)制
鍵盤事件模擬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模擬訪問網(wǎ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);
}
}
寫在后面
筆者并不是特別建議使用selenium做爬蟲,原因如下:
速度慢:
每次運(yùn)行爬蟲都要打開一個(gè)瀏覽器,初始化還需要加載圖片、JS渲染等等一大堆東西;
占用資源太多:
有人說,把換成無頭瀏覽器,原理都是一樣的,都是打開瀏覽器,而且很多網(wǎng)站會驗(yàn)證參數(shù),如果對方看到你惡意請求訪問,會辦了你的請求,然后你又要考慮更換請求頭的事情,事情復(fù)雜程度不知道多了多少,還得去改代碼,麻煩死了。
對網(wǎng)絡(luò)的要求會更高:
加載了很多可能對您沒有價(jià)值的補(bǔ)充文件(如css,js和圖像文件)。 與真正需要的資源(使用單獨(dú)的HTTP請求)相比,這可能會產(chǎn)生更多的流量。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。
相關(guān)文章
Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之基本搜索詳解
這篇文章主要介紹了Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之基本搜索,詳細(xì)分析了Python順序搜索、二分搜索的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
Python實(shí)現(xiàn)帶圖形界面的炸金花游戲(升級版)
詐金花又叫三張牌,是在全國廣泛流傳的一種民間多人紙牌游戲,它具有獨(dú)特的比牌規(guī)則。本文將通過Python語言實(shí)現(xiàn)升級版的帶圖形界面的詐金花游戲,需要的可以參考一下2022-12-12
一篇文章帶你學(xué)習(xí)Python3的高階函數(shù)
這篇文章主要為大家詳細(xì)介紹了Python3的高階函數(shù),主要介紹什么是高階函數(shù),高階函數(shù)的用法以及幾個(gè)常見的內(nèi)置的高階函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
淺析python 定時(shí)拆分備份 nginx 日志的方法
本文給大家分享python 定時(shí)拆分備份 nginx 日志的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-04-04
python Jupyter運(yùn)行時(shí)間實(shí)例過程解析
這篇文章主要介紹了python Jupyter運(yùn)行時(shí)間實(shí)例過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
python實(shí)現(xiàn)批量圖片格式轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量圖片格式轉(zhuǎn)換的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
python實(shí)現(xiàn)隨機(jī)漫步方法和原理
在本篇文章里小編給大家整理了關(guān)于python如何實(shí)現(xiàn)隨機(jī)漫步的相關(guān)知識點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-06-06
安裝出現(xiàn):Requirement?already?satisfied解決辦法
最近pip install的時(shí)候報(bào)錯,一大串Requirement already satisfied,所以下面這篇文章主要給大家介紹了關(guān)于安裝出現(xiàn):Requirement?already?satisfied的解決辦法,需要的朋友可以參考下2022-08-08

