各位老铁们好,相信很多人对下载链接提取网站源码分享都不是特别的了解,因此呢,今天就来为大家分享下关于下载链接提取网站源码分享以及链接提取器下载的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
前言
网上一搜&34;,一般就会出现以下这几款:ApacheNutch、WebMagic、WebCollector、Heritrix3、Selenium
这些框架有哪些优缺点?
-Nutch
支持分布式抓取,并有Hadoop支持,可以进行多机分布抓取,存储和索引。另外很吸引人的一点在于,它提供了一种插件框架,使得其对各种网页内容的解析、各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展,正是由于有此框架,使得Nutch的插件开发非常容易,第三方的插件也层出不穷,极大的增强了Nutch的功能和声誉。
缺点:定制能力较弱、同时社区活跃度较低,网上的资料大多都是几年前的资料。
-WebMagic
简单的API,可快速上手模块化的结构,可轻松扩展提供多线程和分布式支持缺点:现在有部分主流网站通过js渲染页面,不支持JS页面抓取,只能获取到JS渲染之前的页面。
-WebCollector
1.基于文本密度的网页正文自动抽取
2.支持断点重爬
3.支持代理
缺点:
1.不支持分布式,只能单机
2.无URL优先级调度
3.活跃度不高
-Heritrix3
Heritrix的爬虫定制参数多
缺点
1.单实例的爬虫,之间不能进行合作。
2.在有限的机器资源的情况下,却要复杂的操作。
3.只有官方支持,仅仅在Linux上进行了测试。
4.每个爬虫是单独进行工作的,没有对更新进行修订。
5.在硬件和系统失败时,恢复能力很差。
6.很少的时间用来优化性能。
7.相对于Nutch,Heritrix仅仅只是一个爬虫工具,没有提供搜索引擎。如果要对抓取的站点排序必须要实现类似于Pagerank的复杂算法。
Selenium
框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。使用简单,可使用Java,Python语言实现爬虫缺点:速度慢,适合每天爬取数据量要求不高的爬虫工作,因为selenium框架是必须要打开浏览器,然后模拟点击网页,这个过程和您用手打开浏览器打开网址去访问网站一样的速度。这个速度是比较慢。如果您要采集的数据,每天也就1-2万条那么可以用这个selenium框架。但是是我认为是最靠谱的爬虫框架,对于采集的数据量不大的话非常推荐。
在这之外okhttp,httpUtil也能实现基本的爬虫功能。
进入正题
这里就使用我极力推荐的Selenium框架。java环境肯定是需要的,然后这里使用的springboot+maven。
大致思路:
访问百度
查询中秋节
获取中秋节百度百科链接
访问中秋节百度百科页面并获取对应信息
在pom文件中引入Selenium依赖:
<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…
具体代码实现:
具体流程在代码中写的有注释,其中要注意以下两点
1.由于只是需要访问中秋节百度百科一个页面所以直接取了下标为0的内容,偶尔访问报下标越界重新请求下,原因是请求的时候页面没有完全加载出来就获取页面html代码,解决办法在获取页面源码的时候线程休眠1秒。
2.注意指定浏览器驱动路径时是指定下载的驱动路径,而不是启动文件路径
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);
}}