Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说手把手教你用JAVA爬取百度百科”中秋节“信息,希望能够帮助你!!!。
网上一搜 "JAVA爬虫框架有哪些",一般就会出现以下这几款:Apache Nutch、WebMagic、WebCollector、Heritrix3、Selenium
这些框架有哪些优缺点?
支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外很吸引人的一点在于,它提供了一种插件框架,使得其对各种网页内容的解析、各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展,正是由于有此框架,使得 Nutch 的插件开发非常容易,第三方的插件也层出不穷,极大的增强了 Nutch 的功能和声誉。
缺点:定制能力较弱、同时社区活跃度较低,网上的资料大多都是几年前的资料。
1.基于文本密度的网页正文自动抽取
2.支持断点重爬
3.支持代理
缺点:
1.不支持分布式,只能单机
2.无URL优先级调度
3.活跃度不高
Heritrix的爬虫定制参数多
缺点
1.单实例的爬虫,之间不能进行合作。
2.在有限的机器资源的情况下,却要复杂的操作。
3.只有官方支持,仅仅在Linux上进行了测试。
4.每个爬虫是单独进行工作的,没有对更新进行修订。
5.在硬件和系统失败时,恢复能力很差。
6.很少的时间用来优化性能。
7.相对于Nutch,Heritrix仅仅只是一个爬虫工具,没有提供搜索引擎。如果要对抓取的站点排序必须要实现类似于Pagerank的复杂算法。
Selenium
在这之外okhttp, httpUtil 也能实现基本的爬虫功能。
这里就使用我极力推荐的 Selenium 框架。 java环境肯定是需要的,然后这里使用的spring boot + maven。
访问百度
查询中秋节
获取中秋节百度百科链接
访问中秋节百度百科页面并获取对应信息
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
复制代码
Selenium 是模拟真实用户对浏览器进行操作,所以需要安装对于的浏览器并且下载对应的驱动,这里使用最新版本的火狐浏览器
百度云下载链接:pan.baidu.com/s/1ugNF1l51… 提取码:zqkl
阿里云盘链接:www.aliyundrive.com/s/JjJZCfwGK…
public void askBaidu() throws Exception{
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
//ssl证书支持
desiredCapabilities.setCapability("acceptSslCerts", true);
//css搜索支持
desiredCapabilities.setCapability("cssSelectorsEnabled", true);
//js支持
desiredCapabilities.setJavascriptEnabled(true);
// 注意这里指定的路径为下载的火狐驱动路径
System.setProperty("webdriver.gecko.driver", "D:/java/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
String href = "https://baidu.com";
//1、访问目标网站
driver.get(href);
//2、获取输入框,输入selenium
driver.findElement(By.id("kw")).sendKeys("中秋节");
//3、获取“百度一下”按钮,进行搜索
driver.findElement(By.id("su")).click();
//4、获取中秋节百度百科链接
// 获取页面源码
String pageSource = driver.getPageSource();
Document document = Jsoup.parse(pageSource);
// 拿到对应class下面的内容
Elements tables = document.getElementsByClass("t c-gap-bottom-small");
//获取A标签的href 网址 select 获取到当前A标签 attr href 获取到地址
String zhongQiu = tables.get(0).select("a").attr("href");
//5、访问获取到的中秋节百度百科链接
driver.get(zhongQiu);
//6、获取百度百科中秋节基本信息内容
String zhongQiuStr = driver.getPageSource();
Document zhongQiuDoc = Jsoup.parse(zhongQiuStr);
Elements zqInfo = zhongQiuDoc.getElementsByClass("lemma-summary");
//根据 div 标签来划分
Elements div = zqInfo.select("div");
for(int i = 0; i < div.size(); i++){
String info = div.get(i).text();
// 最后得到的中秋节信息
System.out.println(info);
}
}
复制代码
具体流程在代码中写的有注释,其中要注意以下两点
1.由于只是需要访问中秋节百度百科一个页面所以直接取了下标为0的内容,偶尔访问报下标越界重新请求下,原因 是请求的时候页面没有完全加载出来就获取页面html代码,解决办法 在获取页面源码的时候线程休眠1秒。
2.注意指定浏览器驱动路径时是指定下载的驱动路径,而不是启动文件路径
作者:骑电动车的小黄
链接:https://juejin.cn/post/7005950194718408734
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。前言
网上一搜 "JAVA爬虫框架有哪些",一般就会出现以下这几款:Apache Nutch、WebMagic、WebCollector、Heritrix3、Selenium
这些框架有哪些优缺点?
支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外很吸引人的一点在于,它提供了一种插件框架,使得其对各种网页内容的解析、各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展,正是由于有此框架,使得 Nutch 的插件开发非常容易,第三方的插件也层出不穷,极大的增强了 Nutch 的功能和声誉。
缺点:定制能力较弱、同时社区活跃度较低,网上的资料大多都是几年前的资料。
1.基于文本密度的网页正文自动抽取
2.支持断点重爬
3.支持代理
缺点:
1.不支持分布式,只能单机
2.无URL优先级调度
3.活跃度不高
Heritrix的爬虫定制参数多
缺点
1.单实例的爬虫,之间不能进行合作。
2.在有限的机器资源的情况下,却要复杂的操作。
3.只有官方支持,仅仅在Linux上进行了测试。
4.每个爬虫是单独进行工作的,没有对更新进行修订。
5.在硬件和系统失败时,恢复能力很差。
6.很少的时间用来优化性能。
7.相对于Nutch,Heritrix仅仅只是一个爬虫工具,没有提供搜索引擎。如果要对抓取的站点排序必须要实现类似于Pagerank的复杂算法。
Selenium
在这之外okhttp, httpUtil 也能实现基本的爬虫功能。
这里就使用我极力推荐的 Selenium 框架。 java环境肯定是需要的,然后这里使用的spring boot + maven。
访问百度
查询中秋节
获取中秋节百度百科链接
访问中秋节百度百科页面并获取对应信息
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
复制代码
Selenium 是模拟真实用户对浏览器进行操作,所以需要安装对于的浏览器并且下载对应的驱动,这里使用最新版本的火狐浏览器
百度云下载链接:pan.baidu.com/s/1ugNF1l51… 提取码:zqkl
阿里云盘链接:www.aliyundrive.com/s/JjJZCfwGK…
public void askBaidu() throws Exception{
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
//ssl证书支持
desiredCapabilities.setCapability("acceptSslCerts", true);
//css搜索支持
desiredCapabilities.setCapability("cssSelectorsEnabled", true);
//js支持
desiredCapabilities.setJavascriptEnabled(true);
// 注意这里指定的路径为下载的火狐驱动路径
System.setProperty("webdriver.gecko.driver", "D:/java/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
String href = "https://baidu.com";
//1、访问目标网站
driver.get(href);
//2、获取输入框,输入selenium
driver.findElement(By.id("kw")).sendKeys("中秋节");
//3、获取“百度一下”按钮,进行搜索
driver.findElement(By.id("su")).click();
//4、获取中秋节百度百科链接
// 获取页面源码
String pageSource = driver.getPageSource();
Document document = Jsoup.parse(pageSource);
// 拿到对应class下面的内容
Elements tables = document.getElementsByClass("t c-gap-bottom-small");
//获取A标签的href 网址 select 获取到当前A标签 attr href 获取到地址
String zhongQiu = tables.get(0).select("a").attr("href");
//5、访问获取到的中秋节百度百科链接
driver.get(zhongQiu);
//6、获取百度百科中秋节基本信息内容
String zhongQiuStr = driver.getPageSource();
Document zhongQiuDoc = Jsoup.parse(zhongQiuStr);
Elements zqInfo = zhongQiuDoc.getElementsByClass("lemma-summary");
//根据 div 标签来划分
Elements div = zqInfo.select("div");
for(int i = 0; i < div.size(); i++){
String info = div.get(i).text();
// 最后得到的中秋节信息
System.out.println(info);
}
}
复制代码
具体流程在代码中写的有注释,其中要注意以下两点
1.由于只是需要访问中秋节百度百科一个页面所以直接取了下标为0的内容,偶尔访问报下标越界重新请求下,原因 是请求的时候页面没有完全加载出来就获取页面html代码,解决办法 在获取页面源码的时候线程休眠1秒。
2.注意指定浏览器驱动路径时是指定下载的驱动路径,而不是启动文件路径
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。