本文主要介绍Java爬虫(Jsoup和WebDriver)的使用,通过示例代码非常详细的介绍,对大家的学习或者工作有一定的参考价值。有需要的朋友下面和边肖一起学习。
一、Jsoup爬虫
Jsoup是一个Java HTML解析器,可以直接解析一个URL地址和HTML文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似jQuery的操作方法来读取和操作数据。
以博客园首页为例。
1、idea新建maven工程
Pom.xml导入jsoup依赖项
属国
groupIdorg.jsoup/groupId
artifactIdjsoup/artifactId
版本1 . 12 . 1/版本
/依赖关系
j组代码
包com.blb
导入org . jsoup . jsoup;
导入org . jsoup . nodes . document;
导入org . jsoup . nodes . element;
导入org . jsoup . select . elements;
导入Java . io . io exception;
公共类j组{
公共静态void main(String[] args) {
//博客公园主页url
最终字符串URL=' https://www . cn blogs . com ';
尝试{
//先获取整个页面的html标签页
Document doc=Jsoup.connect(url)。get();
system . out . println(doc);
//你可以通过标签获取html中的特定元素
elements title=doc . select(' title ');
string t=title . text();
system . out . println(t);
//您可以通过id获取html中的特定元素
element site _ nav _ top=doc . getelementbyid(' site _ nav _ top ');
string s=site _ nav _ top . text();
system . out . println(s);
} catch (IOException e) {
e . printstacktrace();
}
}
}
这种方式有一个很大的局限性,就是通过jsoup的爬虫只适合抓取静态网页,所以只能抓取当前页面的信息。
二、Webdriver技术
Selenium是一个浏览器自动化框架。Selenium主要由三个工具组成。
1.第一个工具——SeleniumIDE是Firefox的扩展,支持用户录音和回访测试。记录/回访模式有局限性,不适合很多用户。
2.因此,第二个工具——Selenium WebDriver提供了各种语言环境中的API,以支持更多的控制权,并编写符合标准软件开发实践的应用程序。
3.最后一个工具——SeleniumGrid,通过使用Selenium API,帮助工程师控制分布在一系列机器上的浏览器实例,并支持并发运行更多测试。
在项目内部,它们分别被称为“IDE”、“WebDriver”和“Grid”。
什么是 Webdriver ?
官网介绍:
web驱动程序是一个干净、快速的自动化测试web应用的框架。(web驱动程序是一个干净快速的框架,用于自动测试web应用程序。)
WebDriver是为每个浏览器开发的,而不是测试的Web应用中嵌入的JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript安全模型带来的限制。除了来自浏览器厂商的支持,WebDriver还通过在操作系统级别调用来模拟用户输入。WebDriver支持火狐(FirefoxDriver)、IE (InternetExplorerDriver)、Opera (OperaDriver)和Chrome (ChromeDriver)。还支持Android (AndroidDriver)和iPhone (IPhoneDriver)的移动应用测试。它还包括一个基于HtmlUnit的无接口实现,称为HtmlUnitDriver。WebDriver API可以通过Python、Ruby、Java和C#访问,支持开发者使用自己喜欢的编程语言创建测试。
WebDriver如何工作
WebDriver是W3C标准,由Selenium托管。
具体的协议标准可以从http://code.google.com/p/selenium/wiki/jsonWireProtocol # command _ reference查看。
从这个协议中我们可以看到,WebDriver之所以能够与浏览器进行交互,是因为浏览器实现了这些协议。该协议使用JOSN通过HTTP传输。
它的实现使用经典的客户机-服务器模型。客户端发送请求,服务器返回响应。
先明确几个概念。
客户
调用WebDriverAPI的机器。
计算机网络服务器
运行浏览器的机器火狐浏览器。浏览器直接实现了网络驱动的通讯协议,而铬和工业管理学(工业工程)则是通过铬驱动器和InternetExplorerDriver实现的。
会议
服务器端需要维护浏览器的会话,从客户端发过来的请求头中包含了会议信息,服务器端将会执行对应的浏览器页面。
WebElement
这是WebDriverAPI中的对象,代表页面上的一个数字正射影像图元素。
实现:
1.下载浏览器驱动,用的是铬浏览器,下载地址http://chromedriver.storage.googleapis.com/index.html,按对应浏览器版本号下载
2、idea新建maven工程
pom.xml导入入硒元素依赖
属国
groupIdorg.seleniumhq.selenium/groupId
artifactId selenium-Java/artifactId
版本3 .141 .59/版本
/依赖关系
代码实现:
包com.blb
导入org。jsoup。jsoup
导入org。jsoup。节点。文档;
导入org。jsoup。选择。元素;
导入org。打开QA。硒。由;
导入org。打开QA。硒。web驱动程序;
导入org。打开QA。硒。chrome。chrome驱动;
公共类铬合金
公共静态void main(String[] args) {
//下载的铬驱动器位置
系统。设置属性(' web驱动程序。chrome。'驱动',' D:\ \ idea _ workspace \ \ j soup \ \ src \ \ main \ \ chrome驱动。exe’);
//实例化铬驱动器对象
web driver driver=新chrome驱动();
字符串URL=' https://搜索。51工作。com/list/00000000,0000000,9,99,% E5 % A4 % A7 % E6 % 95% B0 % E6 % 8D % AE % E5 % B7 % A5 % E7 % A8 % 8B % E5 % B8 % 88,2,1.html?lang=cstype=post channel=0000工作年份=99 cotype=99学位from=99工作期限=99公司规模=99提供薪资=99 lon lat=0,0 radius=-1 ord _ field=0确认日期=9 from type=dibiao id=0地址=line=专区=00 from=福利=';
//打开指定网站
driver.get(网址);
//解析页面
字符串页源=驱动程序。getpage source();
文档jsoup=jsoup。解析(页面源);
//定义选择器规则
string rule=' # result list div:n-child(4)p span a ';
//通过选择器拿到元素
元素选择=j组。选择(规则);
字符串s=选择。text();
系统。出去。println(s);
//模拟浏览器点击
司机。查找元素(按。CSS选择器(规则).单击();
}
}
爬取电影资源:
包com.blb
导入org。jsoup。jsoup
导入org。jsoup。节点。文档;
导入org。jsoup。节点。元素;
导入org。jsoup。选择。元素;
导入org。打开QA。硒。web驱动程序;
导入org。打开QA。硒。chrome。chrome驱动;
公共类获取电影{
私有静态最终字符串URL=' http://www。zuidazy 5。com’;
公共静态void main(String[] args) {
系统。设置属性(' web驱动程序。chrome。'驱动',' D:\ \ idea _ workspace \ \ j soup \ \ src \ \ main \ \ chrome驱动。exe’);
web driver driver=新chrome驱动();
driver.get(网址);
字符串页源=驱动程序。getpage source();
文档jsoup=jsoup。解析(页面源);
字符串规则1=' body div。兴_ VB ul李span。xing _ vb4a’;
元素选择=j组。选择(规则1);
//遍历当前页的所有电影详情入口
用于(元素e:选择)
{
//获取电影详情页链接
string href=e . attr(' href ');
//进入每个电影详情页面
司机。get(URL href);
字符串页源2=驱动程序。getpage source();
文档jsoup 2=jsoup。解析(页面源2);
//定义获取电影信息元素的规则
string mname=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。“H2之声”;
string mpic=' body div。扭曲分区:n-子分区(1)分区。VOD img img ';
字符串m director=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。视频点播信息框ul Li:n-子(2)span ';
string mactor=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。视频点播信息框ul Li:n-子(3)span ';
string marea=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。视频点播信息框ul Li:n-子(5)span ';
字符串m language=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。视频点播信息框ul Li:n-子(6)span ';
string mshowtime=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。' VOD信息框ul Li:n-child(7)span ';
string m core=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。vodh标签';
string mtimelength=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。视频点播信息框ul Li:n-子(8)span ';
string mlastmodifytime=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。视频点播信息框ul Li:n-子(9)span ';
string minfo=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。视频点播信息盒ul李。连续分区跨度。更多';
string mplayaddress 1=' # play _ 1 ul Li ';
string mplayaddress 2=' # play _ 2 ul Li ';
string msv=' body div。扭曲分区:n-子分区(1)分区。视频点播信息部。vodh span ';
//获取元素信息
String sv=jsoup2.select(msv).text();
String name=jsoup2.select(mname).text();
String pic=jsoup2.select(mpic).attr(' src ');
字符串director=jsoup 2。选择(m控制器).text();
字符串actor=jsoup 2。选择(mactor).text();
String area=jsoup2.select(marea).text();
字符串语言=jsoup 2。选择(m语言).text();
字符串显示时间=j组2。选择(mshowtime).text();
字符串得分=j组2。选择(m内核).text();
字符串时间长度=j组2。选择(mtimelength).text();
string lastmodifytime=jsoup 2。选择(mlastmodifytime).text();
String info=jsoup2.select(minfo).text();
字符串播放地址1=j组2。选择(mplayaddress 1).text();
字符串播放地址2=j组2。选择(mplayaddress 2).text();
//打印电影名
System.out.println(名称);
}
}
}
为了不显示浏览器爬取过程,可以将chromedriver.exe换成无头浏览器phantomjs.exe
下载地址:https://幻想曲。org/下载。超文本标记语言
到此这篇关于Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)爬虫(Jsoup与网络驱动)的使用的文章就介绍到这了,更多相关Java Jsoup与网络驱动爬虫内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。