分享好友 最新动态首页 最新动态分类 切换频道
人工智能-项目实践-搜索引擎-基本的垂直搜索引擎,实现了基本的网络爬虫功能以及用Luence实现检索
2024-12-26 08:45
package download;

人工智能-项目实践-搜索引擎-基本的垂直搜索引擎,实现了基本的网络爬虫功能以及用Luence实现检索

import java.io.IOException; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import org.jsoup.Connection.Response; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import utils.MySQL; import java.util.concurrent.Callable; public class Download implements Callable<Boolean> { private MaintainLinks maintainQueue = new MaintainLinks(); private Db db = new Db(); private boolean full = false; private static final int expextedLinks = 150000; private static String ua = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"; public static void main(String[] args) { String start = "http://www.zol.com.cn/"; Document doc = null; try { Response res = Jsoup.connect(start).response(); // res.header(""); doc = res.parse(); } catch (IOException e) { e.printStackTrace(); } getAllLinks(doc); } @Override public Boolean call() throws Exception { while (!maintainQueue.isWaitEmpty()) { maintainQueue.addWait(cachedWait); cachedWait.clear(); ArrayList<String> currentQueue = maintainQueue.getOptWait(); for (String url : currentQueue) { if (!maintainQueue.hasDownloaded(url)) { download(url); } } System.out.println("线程:" + Thread.currentThread().getId() + ";当前队列链接数:" + maintainQueue.waitSize() + "已下载:" + maintainQueue.downloadSize()); // if (!full) { full = maintainQueue.waitSize() > expextedLinks; } } db.commit(); db.finalise(); maintainQueue.persistence(); return true; } // private HashSet<String> cachedSuccess = new HashSet<String>(); private ArrayList<String> cachedWait = new ArrayList<String>(); public void download(String url) { WrapDownload result = null; try { result = Download.getPage(url); // db.addBatch(result); db.addBatch(result); // 下载队列里面只保存前100w个网页 if (!full) { cachedWait.addAll(result.getLinkList()); } maintainQueue.addSuccess(url); } catch (IOException e) { // e.printStackTrace(); maintainQueue.addFailed(url); System.err.println(url + "下载失败"); } } public static WrapDownload getPage(String url) throws IOException { Document doc = null; doc = Jsoup.connect(url).userAgent(ua).timeout(10000).get(); return new WrapDownload(getAllLinks(doc), getText(doc), url); } public static ArrayList<String> getAllLinks(Document doc) { ArrayList<String> linkList = new ArrayList<String>(); String url = ""; int temp = 0; Elements elements = doc.select("a[href]"); for (Element e : elements) { String attr = e.attr("href"); if (attr.startsWith(".")) { url = e.baseUri() + e.attr("href").substring(1); url = url.replace("//", "/").replace("http:/", "http://"); if((temp=url.indexOf("#"))!=-1){ url = url.substring(0,temp); } if(url.endsWith("/")){ url = url.substring(0,url.length()-1); } linkList.add(url); } else if (attr.startsWith("http")) { url = e.attr("href"); if((temp=url.indexOf("#"))!=-1){ url = url.substring(0,temp); } if(url.endsWith("/")){ url = url.substring(0,url.length()-1); } linkList.add(url); } } return linkList; } public static String getText(Document doc) { return doc.html(); } public class Db { public PreparedStatement ps = null; public int count = 0; private int fail = 0; private MySQL mysql; public Db() { String sql = "INSERT INTO html(url,html_text) VALUES(?,?)"; mysql = new MySQL(); try { mysql.conn.setAutoCommit(false); ps = mysql.conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); } } public void addBatch(WrapDownload data) { try { ps.setString(1, data.getUrl()); ps.setString(2, data.getHtml()); ps.addBatch(); count++; if (count % 20 == 0) { ps.executeBatch(); mysql.conn.commit(); } } catch (SQLException e) { e.printStackTrace(); System.out.println(data.getUrl() + "存储失败" + (++fail)); } } public void commit() { try { ps.executeBatch(); mysql.conn.commit(); } catch (SQLException e) { e.printStackTrace(); } } public void finalise() { try { mysql.conn.close(); } catch (SQLException e) { e.printStackTrace(); } System.out.println("共失败" + fail); } public void insert(WrapDownload data) { String sql = "INSERT INTO html(url,html_text) VALUES(?,?)"; try { PreparedStatement ps = mysql.conn.prepareStatement(sql); ps.setString(1, data.getUrl()); ps.setString(2, data.getHtml()); ps.executeBatch(); } catch (SQLException e) { System.out.println(data.getUrl()); e.printStackTrace(); } } }
最新文章
Maya插件Zoo Tools Pro v2.8.1快捷键增强管理工具箱
Zoo Tools 2 is a modular framework for Maya that would be useful for artists and TDs/developers. You can either just use it or add your own tools if you’re a coder.The developers pointed out that toolsets are only one asp
Docker使用tomcat部署java项目
前提:数据库及表已经建立好1、 先将项目放到 Linux 上某个目录下,如 /home/ubuntu/Project/pinter/pinter注意:如果项目是 war 包形式的,需要先创建 pinter 文件夹,然后在文件夹内对 war 包进行解压:unzip pinter.war最终目录结构2、
2024年人工智能股票龙头概念前十名
紫光股份是国内集成电路设计领域的领先企业,同时也在人工智能芯片研发方面取得了显著成果。公司通过技术创新和战略合作,不断提升自身在AI芯片领域的竞争力。八、科大讯飞 002230科大讯飞在语音识别、语音合成等技术方面处于国内领先地位
AI生成绝美美女写真,轻松一键打造你的数字女神!
在这个科技飞速发展的时代,很多宝子们或许都有这样的经历:为了拍出一张令自己满意的美女写真,几乎要花费十几小时,甚至几百元去找专业摄影师。然而,随着AI技术的不断进步,AI绘画和生成工具的出现,使得这一切都变得无比轻松。在这篇文
AI技术新突破,赋能各行各业,引领未来科技潮流
AI技术再次取得重大突破,成为IT领域备受瞩目的焦点,这一新兴技术不仅在学术界引发广泛讨论,更在商业、医疗、教育等多个行业中展现出巨大的应用潜力,预示着新一轮的科技革命即将到来。面对AI技术的快速发展和广泛应用,相关从业人员和企
2024小学数学名师工作室个人研修计划(12则).pdfVIP
2024小学数学名师工作室个人研修计划(12篇)个人研修计划是指个人为提升自己的知识、技能和能力而制定的一份详细计划。这通常包括学习目标、学习内容、学习方法和时间安排等。以下是小编为大家整理的关于小学数学名师工作室个人研修计划范
kvm-web管理工具webvirtmgr
1 install epel 源,git,gcc等软件sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpmsudo yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx
excel排名_Excel小技巧之排名统计公式大全
Rank函数语法形式:rank(number,ref,[order]),函数名后面的参数中 number 为需要求排名的那个数值或者单元格名称(单元格内必须为数字),ref 为排名的参照数值区域,order的为0和1,默认不用输入,得到的就是
chatGPT升级plus充值方法
ChatGPT升级Plus充值方法ChatGPT是一款智能聊天机器人,能够理解自然语言,通过与ChatGPT的聊天,用户可以得到很多实用的建议和答案。ChatGPT升级Plus功能后,可以提供更加全面的服务,支持更多的功能,同时也需要用户付费。下面是ChatGPT
相关文章
推荐文章
发表评论
0评