如何用selenium製作網路爬蟲

網路爬網對於自動執行網站上的常規任務非常有用。你可以製作一個帶有硒元素的爬蟲來和網站進行互動,就像人類一樣。...

Web爬網對於自動執行網站上常規執行的某些任務非常有用。你可以像人類一樣編寫一個爬蟲來與網站交互。

selenium-web-crawler

在前面的一篇文章中,我們介紹了使用python模塊scray編寫webcrawler的基礎知識。這種方法的侷限性在於爬蟲程序不支持javascript。對於那些大量使用javascript來管理用戶界面的網站,它將無**常工作。對於這種情況,您可以編寫一個使用Google Chrome的爬蟲程序,從而可以像普通的用戶驅動的Chrome瀏覽器一樣處理javascript。

自動化googlechrome需要使用一個叫做Selenium的工具。它是一個軟件組件,位於程序和瀏覽器之間,幫助您通過程序驅動瀏覽器。在本文中,我們將帶您完成自動化googlechrome的整個過程。這些步驟通常包括:

  • 設置硒
  • 使用googlechrome檢查器識別網頁的各個部分
  • 編寫java程序實現googlechrome的自動化

為了本文的目的,讓我們研究一下如何從java讀取googlemail。雖然Google確實提供了一個API(應用程序編程接口)來讀取郵件,但在本文中,我們使用Selenium與googlemail交互來演示這個過程。googlemail大量使用javascript,因此是學習Selenium的好選擇。

設置硒

web驅動程序

如上所述,Selenium由一個軟件組件組成,它作為一個單獨的進程運行,並代表java程序執行操作。此組件稱為Web驅動程序,必須下載到您的計算機上。

單擊此處轉到Selenium下載站點,單擊最新版本並下載適用於您的計算機操作系統(Windows、Linux或MacOS)的相應文件。它是一個包含chromedriver.exe文件. 將其解壓縮到合適的位置,例如C:\WebDrivers\chromedriver.exe文件. 我們稍後將在java程序中使用這個位置。

java模塊

下一步是設置使用Selenium所需的java模塊。假設您正在使用Maven構建java程序,請將以下依賴項添加到POM.xml文件.

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

運行生成過程時,應下載所有必需的模塊並在計算機上進行設置。

硒的第一步

讓我們從硒開始。第一步是創建ChromeDriver實例:

WebDriver driver = new ChromeDriver();

這應該會打開一個谷歌瀏覽器窗口。讓我們導航到谷歌搜索頁面。

driver.get("http://www.google.com");

獲取對文本輸入元素的引用,以便執行搜索。文本輸入元素的名稱為q。我們使用該方法在頁面上定位HTML元素WebDriver.findElement文件().

WebElement element = driver.findElement(By.name("q"));

可以使用sendKeys()方法將文本發送到任何元素。讓我們發送一個搜索詞,並以換行符結束,以便搜索立即開始。

element.sendKeys("terminator");

現在搜索正在進行,我們需要等待結果頁面。我們可以這樣做:

new WebDriverWait(driver, 10) .until(d -> d.getTitle().toLowerCase().startsWith("terminator"));

這段代碼基本上告訴Selenium等待10秒,然後在頁面標題以terminator開頭時返回。我們使用lambda函數來指定要等待的條件。

現在我們可以得到頁面的標題了。

System.out.println("Title: " + driver.getTitle());

完成會話後,可以通過以下方式關閉瀏覽器窗口:

driver.quit();

夥計們,這是一個通過selenium使用java控制的簡單瀏覽器會話。看起來很簡單,但是可以讓你編寫很多通常需要手工完成的事情。

使用google chrome inspector

GoogleChromeInspector是一個非常有用的工具,可以識別硒元素。它允許我們將java中的確切元素作為目標,用於提取信息以及單擊按鈕等交互操作。這是一本如何使用檢查員的入門書。

打開Google Chrome,導航到一個頁面,比如IMDb頁面forjustice League(2017)。

讓我們找到要針對的元素,說電影摘要。右鍵單擊摘要並從彈出菜單中選擇“檢查”。

how to make a web crawler with selenium

從“Elements”選項卡中,我們可以看到summary文本是一個div,其中包含一類summary文本。

how to make a web crawler with selenium

使用css或xpath進行選擇

Selenium支持使用CSS從頁面中選擇元素。(CSS2支持CSS方言)。例如,要從上面的IMDb頁面中選擇摘要文本,我們將編寫:

WebElement summaryEl = driver.findElement(By.cssSelector("div.summary_text"));

您還可以使用XPath以非常類似的方式選擇元素(請參閱此處的規範)。同樣,要選擇摘要文本,我們將執行以下操作:

WebElement summaryEl = driver.findElement(By.xpath("//div[@class='summary_text']"));

XPath和CSS具有類似的功能,因此您可以使用任何您熟悉的功能。

從java讀取googlemail

現在讓我們來看一個更復雜的例子:獲取googlemail。

啟動Chrome驅動程序,導航到gmail.com等待頁面加載。

WebDriver driver = new ChromeDriver();driver.get("https://gmail.com");new WebDriverWait(driver, 10) .until(d -> d.getTitle().toLowerCase().startsWith("gmail"));

接下來,查找email字段(用id identifierId命名)並輸入電子郵件地址。單擊Next按鈕並等待password頁面加載。

/* Type in username/email */{ driver.findElement(By.cssSelector("#identifierId")).sendKeys(email); driver.findElement(By.cssSelector(".RveJvd")).click();}new WebDriverWait(driver, 10) .until(d -> ! d.findElements(By.xpath("//div[@id='password']")).isEmpty() );

現在,我們輸入密碼,再次單擊Next按鈕,等待Gmail頁面加載。

/* Type in password */{ driver .findElement(By.xpath("//div[@id='password']//input[@type='password']")) .sendKeys(password); driver.findElement(By.cssSelector(".RveJvd")).click();}new WebDriverWait(driver, 10) .until(d -> ! d.findElements(By.xpath("//div[@class='Cp']")).isEmpty() );

獲取電子郵件行的列表並循環每個條目。

List<WebElement> rows = driver .findElements(By.xpath("//div[@class='Cp']//table/tbody/tr"));for (WebElement tr : rows) {}

對於每個條目,獲取From字段。請注意,根據會話中的人數,某些From條目可能包含多個元素。

{ /* From Element */ System.out.println("From: "); for (WebElement e : tr .findElements(By.xpath(".//div[@class='yW']/*"))) { System.out.println(" " + e.getAttribute("email") + ", " + e.getAttribute("name") + ", " + e.getText()); }}

現在,把主題拿出來。

{ /* Subject */ System.out.println("Sub: " + tr.findElement(By.xpath(".//div[@class='y6']")).getText());}

以及信息的日期和時間。

{ /* Date/Time */ WebElement dt = tr.findElement(By.xpath("./td[8]/*")); System.out.println("Date: " + dt.getAttribute("title") + ", " + dt.getText());}

這是頁面中電子郵件行的總數。

System.out.println(rows.size() + " mails.");

最後,我們完成了,所以我們退出了瀏覽器。

driver.quit();

總而言之,您可以將Selenium與googlechrome結合使用,對那些大量使用javascript的網站進行爬網。使用googlechrome檢查器,可以很容易地計算出從元素中提取或與元素交互所需的CSS或XPath。

您是否有任何項目受益於使用硒?你面臨什麼問題?請在下面的評論中描述。

  • 發表於 2021-03-11 23:41
  • 閱讀 ( 72 )
  • 分類:程式設計

你可能感興趣的文章

硒(selenium)和碲(tellurium)的區別

...麼 4. 並列比較——硒與碲的表格形式 5. 摘要 什麼是硒(selenium)? 硒是一種化學元素,原子序數為34,化學符號為硒。它是一種非金屬元素,位於週期表的p塊中。硒有不同的同素異形體,如黑色、紅色和灰色硒。我們可以在地殼...

  • 發佈於 2020-10-06 03:54
  • 閲讀 ( 57 )

如何在任何使用python的計算機上安裝selenium webdriver

... Selenium就是這樣一個工具,它允許您在web應用程式上執行自動測試。完整的Selenium包中一個值得注意的元件是Selenium WebDriver。在本文中,我們將簡要介紹Selenium,並提供如何...

  • 發佈於 2021-03-10 21:27
  • 閲讀 ( 60 )

如何用自由透鏡製作夢幻般的照片

免費鏡頭,也稱為鏡頭打擊,是一個簡單的技術:你“自由”的鏡頭從你的相機創造夢想般的照片。這是一個攝影的想法,甚至初學者可以嘗試一些簡單的50毫米的基本鏡頭。 ...

  • 發佈於 2021-03-11 18:28
  • 閲讀 ( 51 )

搜尋引擎是如何工作的?

... 對許多人來說,谷歌就是網際網路。它是尋找新網站的起點,可以說是自網際網路本身以來最重要的發明。沒有搜尋引擎,大眾將無法訪問新的網路內容。 ...

  • 發佈於 2021-03-12 13:31
  • 閲讀 ( 42 )

如何用shotcut製作你的第一部電影

拍電影並不難。另一方面,拍一部好電影需要一個像樣的編輯工具。你可能不會去切割一個新版本的benhur,但只要你有一個編輯工具,滿足你的要求,你應該能夠產生一些至少是可觀察的。 ...

  • 發佈於 2021-03-13 00:10
  • 閲讀 ( 40 )

如何正確設定機器人.txt為您的網站

...引擎。簡短的版本是,他們發出“爬蟲”,這是搜尋網際網路上的資訊程式。然後,他們儲存一些資訊,以便日後指導人們使用。 ...

  • 發佈於 2021-03-13 06:21
  • 閲讀 ( 49 )

學習和製作網路應用的7個最佳免費教程

眼下,不僅是React在人氣最旺的時候,它的人氣也在加速。就JavaScript web開發而言,React是最容易學習的框架之一,也是快速和健壯開發最有效的框架之一。 ...

  • 發佈於 2021-03-15 04:58
  • 閲讀 ( 46 )

如何用普林格斯罐製作wi-fi天線

擴充套件Wi-Fi的DIY解決方案存在的時間和Wi-Fi本身存在的時間一樣長。聰明的網際網路使用者一直在使用各種各樣的東西,從廚房箔紙和食物過濾器,到自制八木風格的天線,以提高他們的Wi-Fi範圍。雖然有很多方法可以微調您的...

  • 發佈於 2021-03-15 18:45
  • 閲讀 ( 48 )

如何使用chrome上的wayback機器檢視死url連結

你可能聽說過網際網路檔案。它是網路上所有數字作品的塵封之地。它不是墳墓,而是構成我們數字體驗的知識寶庫。 ...

  • 發佈於 2021-03-16 05:21
  • 閲讀 ( 37 )

如何用樹莓皮製作android電視盒

想**一個基於Raspberry Pi的media center,但發現基本的Kodi安裝沒有提供足夠的功能?別擔心,有一個經過考驗的替代品:Android電視! ...

  • 發佈於 2021-03-18 23:14
  • 閲讀 ( 58 )