Web爬网对于自动执行网站上常规执行的某些任务非常有用。你可以像人类一样编写一个爬虫来与网站交互。
在前面的一篇文章中,我们介绍了使用python模块scray编写webcrawler的基础知识。这种方法的局限性在于爬虫程序不支持javascript。对于那些大量使用javascript来管理用户界面的网站,它将无**常工作。对于这种情况,您可以编写一个使用Google Chrome的爬虫程序,从而可以像普通的用户驱动的Chrome浏览器一样处理javascript。
自动化googlechrome需要使用一个叫做Selenium的工具。它是一个软件组件,位于程序和浏览器之间,帮助您通过程序驱动浏览器。在本文中,我们将带您完成自动化googlechrome的整个过程。这些步骤通常包括:
为了本文的目的,让我们研究一下如何从java读取googlemail。虽然Google确实提供了一个API(应用程序编程接口)来读取邮件,但在本文中,我们使用Selenium与googlemail交互来演示这个过程。googlemail大量使用javascript,因此是学习Selenium的好选择。
如上所述,Selenium由一个软件组件组成,它作为一个单独的进程运行,并代表java程序执行操作。此组件称为Web驱动程序,必须下载到您的计算机上。
单击此处转到Selenium下载站点,单击最新版本并下载适用于您的计算机操作系统(Windows、Linux或MacOS)的相应文件。它是一个包含chromedriver.exe文件. 将其解压缩到合适的位置,例如C:\WebDrivers\chromedriver.exe文件. 我们稍后将在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控制的简单浏览器会话。看起来很简单,但是可以让你编写很多通常需要手工完成的事情。
GoogleChromeInspector是一个非常有用的工具,可以识别硒元素。它允许我们将java中的确切元素作为目标,用于提取信息以及单击按钮等交互操作。这是一本如何使用检查员的入门书。
打开Google Chrome,导航到一个页面,比如IMDb页面forjustice League(2017)。
让我们找到要针对的元素,说电影摘要。右键单击摘要并从弹出菜单中选择“检查”。
从“Elements”选项卡中,我们可以看到summary文本是一个div,其中包含一类summary文本。
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具有类似的功能,因此您可以使用任何您熟悉的功能。
现在让我们来看一个更复杂的例子:获取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。
您是否有任何项目受益于使用硒?你面临什么问题?请在下面的评论中描述。
...么 4. 并列比较——硒与碲的表格形式 5. 摘要 什么是硒(selenium)? 硒是一种化学元素,原子序数为34,化学符号为硒。它是一种非金属元素,位于周期表的p块中。硒有不同的同素异形体,如黑色、红色和灰色硒。我们可以在地壳...
... Selenium就是这样一个工具,它允许您在web应用程序上运行自动测试。完整的Selenium包中一个值得注意的组件是Selenium WebDriver。在本文中,我们将简要介绍Selenium,并提供如何...
有许多在线工具、浏览器扩展和桌面插件可以将网页转换为PDF。如果您经常使用这些工具,可能会遇到需要一次性转换多个链接的情况。一个接一个地做是浪费时间和乏味的。 ...
你觉得有一部VoIP电话可以不需要一个活跃的移动电话提供商就可以打电话吗?多亏了googlevoice,这已经成为现实。 ...
... Selenium不仅仅是一个工具,而是一套软件,每种工具都提供了一种不同的方法来满足组织的测试需求。它有三个主要组成部分: ...
在Photoshop中从头开始创建动画可能看起来让人望而生畏,但实际上,它们非常简单。启动Photoshop并获取一些文件。是时候用大量的动画礼物惹恼你的朋友了! 我们已经讨论了一些简单的方法来将视频和Youtube片段转换成动画gif,...
我们为Windows提供了许多设计精美的图标,但您是否想过如何定制自己的图标?加载一个网络浏览器和你最喜欢的图像编辑器,因为这里有一个简单的方法。 能够使用高分辨率的图标真的可以让你的电脑看起来很棒,但是当你找...
Gif。吉夫。不管你的发音偏好如何,使用各种各样的应用程序和服务创建这个词都很容易。自从我开始在tl80工作以来,我发现用一个小的动画图片来展示一些关键的特性或设置,有时更容易展示,而不是说出来。因此,我开始**...
...东西,然后想知道,“它怎么知道去哪里找?”答案是“网络爬虫”,它搜索网络并索引,这样你就可以在网上很容易地找到东西。我们会解释的。 搜索引擎和爬虫 当你在谷歌(Google)或必应(Bing)这样的搜索引擎上使用关...