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(); } }

RackNerd提供四款高配美国服务器促销活动低至月$189

RackNerd 商家给的感觉就是一直蹭节日热点,然后时不时通过修改配置结构不断的提供低价年付的VPS主机,不过他们家还是在做事的,这么两年多的发展,居然已经有新增至十几个数据中心,而且产品线发展也是比较丰富。比如也有独立服务器业务,不过在他们轮番的低价年付VPS主机活动下,他们的服务器估摸着销路不是太好的。这里,今天有看到RackNerd商家的独立服务器业务有促销。这次提供美国多个机房的高配独立...

青果网络618:洛杉矶CN2 GIA/东京CN2套餐年付199元起,国内高防独服套餐66折

青果网络怎么样?青果网络隶属于泉州市青果网络科技有限公司,青果网络商家成立于2015年4月1日,拥有工信部颁发的全网IDC/ISP/IP-VPN资质,是国内为数不多具有IDC/ISP双资质的综合型云计算服务商。青果网络是APNIC和CNNIC地址分配联盟成员,泉州市互联网协会会员单位,信誉非常有保障。目前,青果网络商家正式开启了618云特惠活动,针对国内外机房都有相应的优惠。点击进入:青果网络官方...

Hosteons - 限时洛杉矶/达拉斯/纽约 免费升级至10G带宽 低至年$21

Hosteons,一家海外主机商成立于2018年,在之前还没有介绍和接触这个主机商,今天是有在LEB上看到有官方发送的活动主要是针对LEB的用户提供的洛杉矶、达拉斯和纽约三个机房的方案,最低年付21美元,其特点主要在于可以从1G带宽升级至10G,而且是免费的,是不是很吸引人?本来这次活动是仅仅在LEB留言提交账单ID才可以,这个感觉有点麻烦。不过看到老龚同学有拿到识别优惠码,于是就一并来分享给有需...

bloomfilter为你推荐
备忘录模式Java中常用的设计模式有哪些?请详细说明一下工厂模式。jdk6Java 中的 JDK 6 Update 6 到哪下载啊 ? 有一点急色库赤峰中色库博红烨锌业有限公司就是冶炼厂在 赤峰的 什么地方,一 人知道吗???12306注册铁路12306怎么注册用户名杭州营销型网站苏州网站推广有哪些?screencapture手机ScreenCapture文件夹不见了怎么显示toolstripc#中 (ToolStrip)控件是做什么用的?sungard恒生电子和上海sungard的offer,去哪个好???谢谢,,急急急!!!网络管理员教程如何做好网管?网络管理员教程网络管理从零基础开始学习,要怎么学啊
虚拟主机服务器 免费vps服务器 域名到期查询 万网免费域名 edgecast 美元争夺战 精品网 ixwebhosting 小米数据库 智能骨干网 bgp双线 支持外链的相册 根服务器 yundun 万网主机管理 网页提速 东莞主机托管 双线空间 服务器托管价格 server2008 更多