文档章节

[入门]selenium+JAVA实现网页爬虫(2016/7/13)

 悟空救我
发布于 2016/07/14 16:33
字数 699
阅读 458
收藏 4

用JAVA写爬虫程序最常用的就是利用HttpClient这个第三方库了,但对于页面中JS生成的内容,则有些无能为力。另外,部分网站对爬虫程序的敏感度较高,用HttpClient访问很容易被跳转至验证码页面。而使用selenium来控制浏览器访问页面,再进行HTML解析是个有效的解决方案。

环境:JDK_1.8,Eclipse_4.6,selenium_2.53.1,Firefox_47.0.1,

selenium下载地址:http://docs.seleniumhq.org/download/ ,在Selenium Client & WebDriver Language Bindings栏中下载JAVA的jar包,下载到的是一个名为“selenium-java-2.53.1.zip”的压缩包。

Firefox可直接被selenium调用,如果要使用其他浏览器,则需要在页面下方下载对应的浏览器驱动。

新建一个java工程,将压缩包内selenium-java-2.53.1.jar和selenium-java-2.53.1-srcs.jar,以及lib文件夹下的所有jar文件导入工程内。

之后编写一个demo进行测试,代码如下:

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriver.Navigation;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;


public class Demo {
	
	public void testFirefox(){
		//如果Firefox不是安装在默认路径下,需要手动指定其位置
		System.setProperty("webdriver.firefox.bin",
				"D:\\Program Files\\Mozilla Firefox\\firefox.exe");
		//加载Firefox默认配置
		ProfilesIni pi = new ProfilesIni(); 
		FirefoxProfile profile = pi.getProfile("default");
		
		//启动Firefox浏览器
		WebDriver ffDriver = new FirefoxDriver(profile);
		Navigation navigation = ffDriver.navigate();	
        //打开360搜索
		navigation.to("http://www.so.com");  
		
		//搜索HTML元素,支持按id、name、标签名、CSS选择器、xpath语法等方式
		//用id获取搜索输入框
		WebElement inputText = ffDriver.findElement(By.id("input")); 
		//用id获取搜索按钮
		WebElement submitButton = ffDriver.findElement(By.id("search-button")); 
		//搜索输入框内输入“喵帕斯”
		inputText.sendKeys("喵帕斯"); 			
		//为演示点击效果,延迟3秒
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}		
		//点击“搜一下”按钮
		submitButton.click(); 
		
		//使用xpath语法获取文章标题
		List<WebElement> titleList = 
				ffDriver.findElements(By.xpath("//h3[@class='res-title']/a")); 
		//输出获取到的文章标题
		for(WebElement e : titleList)
			System.out.println(e.getText());
		
		//5秒后关闭浏览器
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		if(ffDriver != null)
			ffDriver.close();
	}
	
	
	public static void main(String args[]){
		Demo demo = new Demo();
		demo.testFirefox();
	}

}

运行后观察启动Firefox并进行搜索的过程。

后台输出如下:

喵帕斯_360百科
【悠哉日常大王】官方解释“喵帕斯”的意思_bilibili吧_百度贴吧
喵帕斯吧_百度贴吧
喵帕斯喵一喵_音MAD_鬼畜_bilibili_哔哩哔哩弹幕视频网
【喵帕斯】喵帕斯喵帕斯_音MAD_鬼畜_bilibili_哔哩哔哩弹幕视频网
「悠哉日常大王」人气投票结果公布 喵帕斯荣登榜首! - 178动漫频道
【表情、截图】喵帕斯~自己做的表情以及一些截图。_悠哉日常大王...

(360的搜索结果标题的标签并不完全相同,因此按照我代码中的xpath语法进行匹配,遗漏掉了几条百度贴吧的搜索结果)

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 1
码字总数 699
作品 0
长春
Python爬虫入门 | 1 Python环境的安装

这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源。看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内...

DC学院
2017/12/14
0
0
让Scrapy的Spider更通用

1,引言 《Scrapy的架构初探》一文所讲的Spider是整个架构中最定制化的一个部件,Spider负责把网页内容提取出来,而不同数据采集目标的内容结构不一样,几乎需要为每一类网页都做定制。我们有...

fullerhua
2016/07/01
92
0
Python网络爬虫基础及Requests库入门

Robots协议 网络爬虫的问题 在讲python网络爬虫之前,先来看看网络爬虫的一些问题以及robots协议。首先python爬虫功能主要使用的库有Requests库和Scrapy库。他们的区别如下: 正常情况下Web...

zengxiantao1994
2017/10/13
0
0
java爬虫系列(一)——爬虫入门

爬虫框架介绍 java爬虫框架非常多,比如较早的有Heritrix,轻量级的crawler4j,还有现在最火的WebMagic。 他们各有各的优势和劣势,我这里顺便简单介绍一下吧。 Heritrix 优势 java的第一批爬...

Mr_OOO
2017/12/31
0
0
【重出江湖】开发自己的搜索引擎Lucene+Heritrix(第二版)

【重出江湖】开发自己的搜索引擎Lucene+Heritrix(第二版) 搜索引擎技术经典图书《开发自己的搜索引擎Lucene+Heritrix(第二版)》再次推出 本书是一本介绍搜索引擎开发的书籍,通过本书,读...

youlechang
2009/12/24
4.4K
9

没有更多内容

加载失败,请刷新页面

加载更多

【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
9
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部