文档章节

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

 悟空救我
发布于 2016/07/14 16:33
字数 699
阅读 408
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
13
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部