文档章节

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

 悟空救我
发布于 2016/07/14 16:33
字数 699
阅读 351
收藏 4
点赞 0
评论 0

用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

Python网络爬虫基础及Requests库入门

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

zengxiantao1994 ⋅ 2017/10/13 ⋅ 0

让Scrapy的Spider更通用

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

fullerhua ⋅ 2016/07/01 ⋅ 0

java爬虫系列(一)——爬虫入门

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

Mr_OOO ⋅ 2017/12/31 ⋅ 0

【重出江湖】开发自己的搜索引擎Lucene+Heritrix(第二版)

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

youlechang ⋅ 2009/12/24 ⋅ 9

Python使用xslt提取网页数据

1,引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor。本文记录了确定gsExtractor的技术路线过程中所做的编程实验。这是第一部分,实验了用xsl...

fullerhua ⋅ 2016/05/16 ⋅ 0

Python 即时网络爬虫项目: 内容提取器的定义

项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据...

fullerhua ⋅ 2016/05/27 ⋅ 0

Python爬虫:爬取人人都是产品经理的数据

爬取内容: 人人都是产品经理首页(www.woshipm.com)左侧【最新文章】下如图样式的文章标题、浏览量和缩略图。 思路: 1. 用BeautifulSoup解析网页 变量名 = BeautifulSoup(网页信息,'lxml'...

bestdwd ⋅ 2017/05/22 ⋅ 0

一个月入门Python爬虫,快速获取大规模数据

数据是创造和决策的原材料,高质量的数据都价值不菲。而利用爬虫,我们可以获取大量的价值数据,经分析可以发挥巨大的价值,比如: 豆瓣、知乎:爬取优质答案,筛选出各话题下热门内容,探索...

Python开发者 ⋅ 04/25 ⋅ 0

API例子:用Java/JavaScript下载内容提取器

1,引言 本文讲解怎样用Java和JavaScript使用 GooSeeker API 接口下载内容提取器,这是一个示例程序。什么是内容提取器?为什么用这种方式?源自Python即时网络爬虫开源项目:通过生成内容提...

fullerhua ⋅ 2016/06/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部