如何用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
  • 阅读 ( 359 )
  • 分类:编程

你可能感兴趣的文章

硒(selenium)和碲(tellurium)的区别

...么 4. 并列比较——硒与碲的表格形式 5. 摘要 什么是硒(selenium)? 硒是一种化学元素,原子序数为34,化学符号为硒。它是一种非金属元素,位于周期表的p块中。硒有不同的同素异形体,如黑色、红色和灰色硒。我们可以在地壳...

  • 发布于 2020-10-06 03:54
  • 阅读 ( 368 )

如何在任何使用python的计算机上安装selenium webdriver

... Selenium就是这样一个工具,它允许您在web应用程序上运行自动测试。完整的Selenium包中一个值得注意的组件是Selenium WebDriver。在本文中,我们将简要介绍Selenium,并提供如何...

  • 发布于 2021-03-10 21:27
  • 阅读 ( 466 )

如何用wget将多个网页转换成pdf

有许多在线工具、浏览器扩展和桌面插件可以将网页转换为PDF。如果您经常使用这些工具,可能会遇到需要一次性转换多个链接的情况。一个接一个地做是浪费时间和乏味的。 ...

  • 发布于 2021-03-19 11:02
  • 阅读 ( 521 )

如何用googlevoice制作voip电话

你觉得有一部VoIP电话可以不需要一个活跃的移动电话提供商就可以打电话吗?多亏了googlevoice,这已经成为现实。 ...

  • 发布于 2021-03-24 20:10
  • 阅读 ( 424 )

自动化测试的五大工具

... Selenium不仅仅是一个工具,而是一套软件,每种工具都提供了一种不同的方法来满足组织的测试需求。它有三个主要组成部分: ...

  • 发布于 2021-03-26 20:32
  • 阅读 ( 223 )

最好的网上刮网工具

... 相关:如何使用Selenium**网络爬虫 ...

  • 发布于 2021-03-28 12:12
  • 阅读 ( 228 )

如何用photoshop制作自定义gif动画

在Photoshop中从头开始创建动画可能看起来让人望而生畏,但实际上,它们非常简单。启动Photoshop并获取一些文件。是时候用大量的动画礼物惹恼你的朋友了! 我们已经讨论了一些简单的方法来将视频和Youtube片段转换成动画gif,...

  • 发布于 2021-04-12 11:17
  • 阅读 ( 245 )

如何用任何图像制作高分辨率Windows7图标

我们为Windows提供了许多设计精美的图标,但您是否想过如何定制自己的图标?加载一个网络浏览器和你最喜欢的图像编辑器,因为这里有一个简单的方法。 能够使用高分辨率的图标真的可以让你的电脑看起来很棒,但是当你找...

  • 发布于 2021-04-12 22:12
  • 阅读 ( 213 )

如何用windows中的任何东西制作gif,包括应用程序和游戏

Gif。吉夫。不管你的发音偏好如何,使用各种各样的应用程序和服务创建这个词都很容易。自从我开始在tl80工作以来,我发现用一个小的动画图片来展示一些关键的特性或设置,有时更容易展示,而不是说出来。因此,我开始**...

  • 发布于 2021-05-15 02:07
  • 阅读 ( 175 )

什么是网络爬虫,它是如何工作的?

...东西,然后想知道,“它怎么知道去哪里找?”答案是“网络爬虫”,它搜索网络并索引,这样你就可以在网上很容易地找到东西。我们会解释的。 搜索引擎和爬虫 当你在谷歌(Google)或必应(Bing)这样的搜索引擎上使用关...

  • 发布于 2021-07-14 07:45
  • 阅读 ( 110 )
哈哈是只狗121
哈哈是只狗121

0 篇文章