一、创建数据表
表名:relative_web |
表中文名:网站信息表 |
字段名称 | 字段类型 | 字段解释 |
keywords | varchar(100) | 关键词 |
source_domain | varchar(200) | 网站域名 |
rw_title | varchar(1000) | 搜索引擎给出的网站标题 |
rw_url | varchar(1000) | 搜索引擎给出的网站url |
rw_description | varchar(5000) | 搜索引擎给出的网站标题 |
rw_position | int | 搜索引擎中的排名 |
对应于mysql的建表语句:
Create table relative_web(keywords varchar(100),source_domain varchar(200),rw_title varchar(1000),
rw_url varchar(1000),rw_description varchar(5000), rw_position int) character set utf8mb4 collate utf8mb4_bin;
表名:web_detail |
表中文名:网站详情表 |
字段名称 | 字段类型 | 字段解释 |
baidu_url | varchar(1000) | 网站在百度的映射url |
original_url | varchar(1000) | 网站真实的url |
web_html | MEDIUMTEXT | 网站内容 |
对应于mysql的建表语句:
Create table web_detail(
baidu_url varchar(1000),original_url varchar(1000), web_html MEDIUMTEXT) character set utf8mb4 collate utf8mb4_bin;
二、编写抓取函数
说明:本战记的编程语言为java,所有代码都是java,由于数据库在云服务器中,以及一些数据抓取需要登录,所以给出的代码将屏蔽这部分参数;另外还会用到一些工具类(代码全贴出来有点多),所以这里给出的是核心代码,而不是全部代码,读者无法直接运行博客中的代码,但是可以通过博客中的代码了解整个项目的过程和思路,如需完整代码,可以发邮件联系。
1、 引入jsoup的maven依赖包
<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.9.1</version>
</dependency>
2、 抓取百度搜索数据
/**
* 抓取51msg.net相关的网站信息,并保存到数据库
*/
public void crawl51msgRelative() {
BaiduSearch bs = new BaiduSearch();
String[] keywords = {"搜索导航","搜索大全","搜索引擎大全","国外搜索引擎","网页搜索","谷歌搜索","谷歌镜像","综合搜索"};//"搜索","搜索引擎"
Sort sort = new Sort();
Sqlca sqlca = null;
try {
sqlca = sort.getSqlca();
for (String keyworod : keywords) {
int pos = 0;
for (int i = 0; i < 60; i++) {
String ss = bs.searchRealTime(keyworod, i, "Baidu");
System.out.println(i);
JSONObject jsonObject=null;
try {
jsonObject = JSONObject.parseObject(ss);
}catch (Exception e){
e.printStackTrace();
break;
}
String tt = jsonObject.getJSONObject("hits").getString("total");
if (Integer.parseInt(tt) < 1) System.out.println("无数据");
//插入数据库
JSONArray ja = jsonObject.getJSONObject("hits").getJSONArray("hits");
for (Object obj : ja) {
pos++;
JSONObject jos = (JSONObject) obj;
JSONObject jo = jos.getJSONObject("_source");
String title = "";
if (jo.containsKey("Title")) title = jo.getString("Title");
title=title.replace("'","‘");
String Domain = "";
if (jo.containsKey("Domain")) Domain = jo.getString("Domain");
Domain=Domain.replace("'","‘");
String Description = "";
if (jo.containsKey("Description")) Description = jo.getString("Description");
Description=Description.replace("'","‘");
sqlca.execute("insert into relative_web(keywords ,source_domain ,rw_title,rw_url ,rw_description , rw_position) values('" +
keyworod + "','51msg.net','" + title + "','" + Domain + "','" + Description + "'," + pos + ")");
}
Thread.sleep(6000);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlca != null) sqlca.closeAll();
}
}
3、 数据去重
/**
* 关联网站去重
*/
public void removeRepeat(){
Sort sort = new Sort();
Sqlca sqlca = null;
try {
sqlca = sort.getSqlca();
sqlca.execute("create table temp008 as \n" +
"select min(keywords ) keywords,source_domain ,rw_title,min(rw_url ) rw_url , rw_description, min(rw_position) rw_position from relative_web group by source_domain ,rw_title, rw_description limit 10\n ");
sqlca.execute("delete from relative_web");
sqlca.execute("insert into relative_web(keywords,source_domain ,rw_title, rw_url , rw_description, rw_position) select keywords,source_domain ,rw_title, rw_url , rw_description, rw_position from temp008 ");
sqlca.execute("drop table temp008");
}catch (Exception e){
e.printStackTrace();
} finally {
if (sqlca != null) sqlca.closeAll();
}
}
4、 抓取网站内容数据
/**
* 通过百度url,抓取网站的内容数据
*/
public void getWebContentByBaiduUrl( ){
Sort sort = new Sort();
Sqlca sqlca = null;
try {
sqlca = sort.getSqlca();
sqlca.execute("select rw_url from relative_web a where not exists(select 1 from web_detail b where a.rw_url=b.baidu_url)");
List<String> list_url=new ArrayList<>();
while (sqlca.next()){
list_url.add(sqlca.getString("rw_url"));
}
for(String baiduUrl:list_url) {
try {
Document doc = Jsoup.connect(baiduUrl).timeout(150000).get();
System.out.println(doc.baseUri());
sqlca.execute("insert into web_detail(\n" +
" baidu_url ,original_url , web_html )" +
"values('" + baiduUrl + "','" + doc.baseUri() + "','" + doc.html().replace("'", "’") + "')");
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
}
}catch (Exception e){
e.printStackTrace();
} finally {
if (sqlca != null) sqlca.closeAll();
}
}
未完待续……
分享到:
相关推荐
机器学习入门与实战(scikit-learn和Keras)课件—决策树.pdf机器学习入门与实战(scikit-learn和Keras)课件—决策树.pdf机器学习入门与实战(scikit-learn和Keras)课件—决策树.pdf机器学习入门与实战(scikit-learn和...
《Mastering Machine Learning With scikit-learn》是一本深入实践的指南,它将带领读者通过scikit-learn掌握机器学习的核心概念和技术,提升数据分析和预测能力,对于希望在机器学习领域深入研究或提升实战技能的人...
《Machine Learning with PyTorch and Scikit-Learn-Packt》(2022)是机器学习领域的权威指南,涵盖了机器学习和深度学习的基础知识和实践经验。读者可以通过学习本书籍来掌握机器学习模型开发和实践的技能,从而...
机器学习(Machine Learning)是让机器通过统计方法从数据中学习任务的技术;而深度学习(Deep Learning)是机器学习的一个子集,它通过构建具有许多层次的神经网络直接从数据中学习表征和任务。深度学习之所以被...
machine-learning-ex4 吴恩达 机器学习 课程习题代码
机器学习技法6 - 4 - Machine Learning in Action (12-59).mp4
吴恩达的机器学习课程主要包括两门,一门是在Cousera上的《机器学习》,另一门是他在斯坦福大学教授的《CS229: Machine Learning》。 Cousera上的《机器学习》课程侧重于概念理解,而不是数学推导。这门课程重视...
Human-in-the-Loop Machine Learning lays out methods for humans and machines to work together effectively. Summary Most machine learning systems that are deployed in the world today learn from human ...
《Mastering Machine Learning with scikit-learn Second Edition》是一本深度探索机器学习技术与scikit-learn库的专著。这本书旨在帮助读者掌握利用Python语言和scikit-learn进行高效机器学习的方法。scikit-learn...
"机器学习实战_Machine_Learning_in_Action.pdf" 机器学习实战是指通过实践和应用机器学习算法来解决实际问题的过程。在本书中,我们将学习机器学习的基础知识,包括k-近邻算法、决策树、基于概率论的分类方法、...
机器学习 - MachineLearning - ML、深度学习 - DeepLearning - DL、自然语言处理 NLP
4. 智能系统构建:文档提到了构建智能系统的概念,这涉及到如何将机器学习算法应用于实际问题中,从而实现决策支持、预测分析、自动化控制等功能。 5. 书籍作者和出版信息:文档中提到了本书的作者Aurélien Géron...
教材的全名是《Pattern Recognition and Machine Learning》,其中包含了模式识别和机器学习的前沿研究和方法。毕肖普是微软研究院的副主任,并在剑桥大学担任研究员。他在这本书中详细探讨了概率论、统计推断、神经...
AiLearning: 机器学习 - MachineLearning - ML、深度学习 - DeepLearning - DL、自然语言处理 NLP
Machine-Learning-Algorithms-from-Scratch, 从零开始实现机器学习算法 Machine-Learning-Algorithms-from-Scratch从零开始实现机器学习算法。目前实现的算法:简单线性回归。数据集:来自Quandl的股票数据逻辑回归...
《Hands-On Machine Learning with Scikit-Learn and TensorFlow》是一本由Aurélien Géron编写的经典书籍,旨在引导读者深入理解并实践机器学习,特别是深度学习领域,结合TensorFlow和Scikit-Learn这两个强大的...
标题中的“Machine-Learning-for-IoT-master_iot_iot_machinelearning_IOTmatla”表明这是一个关于物联网(IoT)和机器学习(Machine Learning)的项目,特别的是,它使用了MATLAB编程语言。MATLAB是一款强大的数值...