bloomfilterJAVA怎么弄爬虫

bloomfilter  时间:2021-07-01  阅读:()

JAVA怎么弄爬虫

以下是一个使用java实现的简单爬虫核心代码:   public void crawl() throws Throwable { while (continueCrawling()) { CrawlerUrl url = getNextUrl(); //获取待爬取队列中的下一个URL if (url != null) { printCrawlInfo(); String content = getContent(url); //获取URL的文本信息 //聚焦爬虫只爬取与主题内容相关的网页,这里采用正则匹配简单处理 if (isContentRelevant(content, this.regexpSearchPattern)) { saveContent(url, content); //保存网页至本地 //获取网页内容中的链接,并放入待爬取队列中 Collection urlStrings = extractUrls(content, url); addUrlsToUrlQueue(url, urlStrings); } else { System.out.println(url + " is not relevant ignoring ..."); } //延时防止被对方屏蔽 Thread.sleep(this.delayBetweenUrls); } } closeOutputStream(); } private CrawlerUrl getNextUrl() throws Throwable { CrawlerUrl nextUrl = null; while ((nextUrl == null) && (!urlQueue.isEmpty())) { CrawlerUrl crawlerUrl = this.urlQueue.remove(); //doWeHavePermissionToVisit:是否有权限访问该URL,友好的爬虫会根据网站提供的"Robot.txt"中配置的规则进行爬取 //isUrlAlreadyVisited:URL是否访问过,大型的搜索引擎往往采用BloomFilter进行排重,这里简单使用HashMap //eptable:是否达到指定的深度上限。

爬虫一般采取广度优先的方式。

一些网站会构建爬虫陷阱(自动生成一些无效链接使爬虫陷入死循环),采用深度限制加以避免 if (doWeHavePermissionToVisit(crawlerUrl) && (!isUrlAlreadyVisited(crawlerUrl)) && eptable(crawlerUrl)) { nextUrl = crawlerUrl; // System.out.println("Next url to be visited is " + nextUrl); } } return nextUrl; } private String getContent(CrawlerUrl url) throws Throwable { //HttpClient4.1的调用与之前的方式不同 HttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url.getUrlString()); StringBuffer strBuf = new StringBuffer(); HttpResponse response = client.execute(httpGet); if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) { HttpEntity entity = response.getEntity(); if (entity != null) { BufferedReader reader = new BufferedReader( new InputStreamReader(entity.getContent(), "UTF-8")); String line = null; if (entity.getContentLength() > 0) { strBuf = new StringBuffer((int) entity.getContentLength()); while ((line = reader.readLine()) != null) { strBuf.append(line); } } } if (entity != null) { nsumeContent(); } } //将url标记为已访问 markUrlAsVisited(url); return strBuf.toString(); } public static boolean isContentRelevant(String content, Pattern regexpPattern) { boolean retValue = false; if (content != null) { //是否符合正则表达式的条件 Matcher m = regexpPattern.matcher(content.toLowerCase()); retValue = m.find(); } return retValue; } public List extractUrls(String text, CrawlerUrl crawlerUrl) { Map urlMap = new HashMap(); extractHttpUrls(urlMap, text); extractRelativeUrls(urlMap, text, crawlerUrl); return new ArrayList(urlMap.keySet()); } private void extractHttpUrls(Map urlMap, String text) { Matcher m = (text); while (m.find()) { String url = m.group(); String[] terms = url.split("a href=""); for (String term : terms) { // System.out.println("Term = " + term); if (term.startsWith("http")) { int index = term.indexOf("""); if (index > 0) { term = term.substring(0, index); } urlMap.put(term, term); System.out.println("Hyperlink: " + term); } } } } private void extractRelativeUrls(Map urlMap, String text, CrawlerUrl crawlerUrl) { Matcher m = relativeRegexp.matcher(text); URL textURL = crawlerUrl.getURL(); String host = textURL.getHost(); while (m.find()) { String url = m.group(); String[] terms = url.split("a href=""); for (String term : terms) { if (term.startsWith("/")) { int index = term.indexOf("""); if (index > 0) { term = term.substring(0, index); } String s = //" + host + term; urlMap.put(s, s); System.out.println("Relative url: " + s); } } } } public static void main(String[] args) { try { String url = ""; Queue urlQueue = new LinkedList(); String regexp = "java"; urlQueue.add(new CrawlerUrl(url, 0)); NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L, regexp); // boolean allowCrawl = crawler.areWeAllowedToVisit(url); // System.out.println("Allowed to crawl: " + url + " " + // allowCrawl); crawler.crawl(); } catch (Throwable t) { System.out.println(t.toString()); t.printStackTrace(); } }

随风云25元/月 ,德阳高防云服务器 2核2G 10M 75元/月 内蒙古三线BGP服务器 2核2G 5M

公司介绍成都随风云科技有限公司成立于2021年,是国内领先的互联网业务平台服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、双线高防、香港等优质的IDC资源。公司一直秉承”以人为本、客户为尊、永续创新&...

享有云:美国BGP云服务器低至20元/月起,首月打折;香港2核2G2M仅50元/月起

享有云怎么样?享有云是一家新的国内云服务器商家,目前提供国内、香港及海外地区的云服务器,拥有多线路如:BGP线路、CN2线路、高防等云服务器,并且提供稳定、安全、弹性、高性能的云端计算服务,实时满足您的多样性业务需求。目前,美国bgp云服务器,5M带宽,低至20元/月起,270元/年起,首月打折;香港2核2G2M仅50元/月起,450元/年起!点击进入:享有云官方网站地址享有云优惠活动:一、美国B...

热网互联33元/月,香港/日本/洛杉矶/韩国CN2高速线路云主机

热网互联怎么样?热网互联(hotiis)是随客云计算(Suike.Cloud)成立于2009年,增值电信业务经营许可证:B1-20203716)旗下平台。热网互联云主机是CN2高速回国线路,香港/日本/洛杉矶/韩国CN2高速线路云主机,最低33元/月;热网互联国内BGP高防服务器,香港服务器,日本服务器全线活动中,大量七五折来袭!点击进入:热网互联官方网站地址热网互联香港/日本/洛杉矶/韩国cn2...

bloomfilter为你推荐
0x800700050x80070005拒绝访问主要是什么问题md5值哈希值 散列值 MD5值 都是什么意思啊知识库管理系统什么是知识管理oncontextmenu如何禁用ImageButton的右键?qq注册账号用QQ注册有几种方法?电子日历怎样调整电子日历上的时间rownumbersql server 2005中row_number怎么用有b吗34B的胸围有多大?弹幕网站谁能给我解释一下什么叫A站,什么叫B站?都是啥网站?社工库网站怎么找社工库?
花生壳免费域名申请 3322免费域名 万网域名管理 asp.net主机 国外服务器网站 视频存储服务器 godaddy支付宝 parseerror NetSpeeder xen typecho 免费ftp空间申请 台湾谷歌地址 cn3 服务器是干什么用的 空间登入 独享主机 个人免费邮箱 贵州电信 美国主机侦探 更多