java怎么写爬虫

1. 如何用Java写一个爬虫

最近刚好在学这个,对于一些第三方工具类或者库,一定要看官方tutorial啊。

学会用chrome network 分析请求,或者fiddler抓包分析。

普通的网页直接用了。知乎爬虫基于HttpClient写了一个网络连接线程池,并且封装了常用的get和post两种网页下载的方法。

(4)自动获取网页编码(爬虫主要技术点3)

自动获取网页编码是确保下载网页html不出现乱码的前提。知乎爬虫中提供方法可以解决绝大部分乱码下载网页乱码问题。

(5)网页解析和提取(爬虫主要技术点4)

使用Java写爬虫,常见的网页解析和提取方法有两种:利用开源Jar包Jsoup和正则。一般来说,Jsoup就可以解决问题,极少出现Jsoup不能解析和提取的情况。Jsoup强大功能,使得解析和提取异常简单。知乎爬虫采用的就是Jsoup。

(6)正则匹配与提取(爬虫主要技术点5)

虽然知乎爬虫采用Jsoup来进行网页解析,但是仍然封装了正则匹配与提取数据的方法,因为正则还可以做其他的事情,如在知乎爬虫中使用正则来进行url地址的过滤和判断。

(7)数据去重(爬虫主要技术点6)

对于爬虫,根据场景不同,可以有不同的去重方案。(1)少量数据,比如几万或者十几万条的情况,使用Map或Set便可;(2)中量数据,比如几百万或者上千万,使用BloomFilter(著名的布隆过滤器)可以解决;(3)大量数据,上亿或者几十亿,Redis可以解决。知乎爬虫给出了BloomFilter的实现,但是采用的Redis进行去重。

(8)设计模式等Java高级编程实践

除了以上爬虫主要的技术点之外,知乎爬虫的实现还涉及多种设计模式,主要有链模式、单例模式、组合模式等,同时还使用了Java反射。除了学习爬虫技术,这对学习设计模式和Java反射机制也是一个不错的案例。

4. 一些抓取结果展示

3. 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 //isDepthAcceptable:是否达到指定的深度上限。爬虫一般采取广度优先的方式。

一些网站会构建爬虫陷阱(自动生成一些无效链接使爬虫陷入死循环),采用深度限制加以避免 if (doWeHavePermissionToVisit(crawlerUrl) && (!isUrlAlreadyVisited(crawlerUrl)) && isDepthAcceptable(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 了。知乎爬虫基于HttpClient写了一个网络连接线程池,并且封装了常用的get和post两种网页下载的方法。

(4)自动获取网页编码(爬虫主要技术点3)自动获取网页编码是确保下载网页html不出现乱码的前提。知乎爬虫中提供方法可以解决绝大部分乱码下载网页乱码问题。

(5)网页解析和提取(爬虫主要技术点4)使用Java写爬虫,常见的网页解析和提取方法有两种:利用开源Jar包Jsoup和正则。一般来说,Jsoup就可以解决问题,极少出现Jsoup不能解析和提取的情况。

Jsoup强大功能,使得解析和提取异常简单。知乎爬虫采用的就是Jsoup。

。展开下面说明知乎爬虫的源码和涉及主要技术点:(1)程序package组织(2)模拟登录(爬虫主要技术点1)要爬去需要登录的网站数据,模拟登录是必要可少的一步,而且往往是难点。

知乎爬虫的模拟登录可以做一个很好的案例。要实现一个网站的模拟登录,需要两大步骤是:(1)对登录的请求过程进行分析,找到登录的关键请求和步骤,分析工具可以有IE自带(快捷键F12)、Fiddler、HttpWatcher;(2)编写代码模拟登录的过程。

(3)网页下载(爬虫主要技术点2)模拟登录后,便可下载目标网页html了。知乎爬虫基于HttpClient写了一个网络连接线程池,并且封装了常用的get和post两种网页下载的方法。

(4)自动获取网页编码(爬虫主要技术点3)自动获取网页编码是确保下载网页html不出现乱码的前提。知乎爬虫中提供方法可以解决绝大部分乱码下载网页乱码问题。

(5)网页解析和提取(爬虫主要技术点4)使用Java写爬虫,常见的网页解析和提取方法有两种:利用开源Jar包Jsoup和正则。一般来说,Jsoup就可以解决问题,极少出现Jsoup不能解析和提取的情况。

Jsoup强大功能,使得解析和提取异常简单。知乎爬虫采用的就是Jsoup。

(6)正则匹配与提取(爬虫主要技术点5)虽然知乎爬虫采用Jsoup来进行网页解析,但是仍然封装了正则匹配与提取数据的方法,因为正则还可以做其他的事情,如在知乎爬虫中使用正则来进行url地址的过滤和判断。(7)数据去重(爬虫主要技术点6)对于爬虫,根据场景不同,可以有不同的去重方案。

(1)少量数据,比如几万或者十几万条的情况,使用Map或Set便可;(2)中量数据,比如几百万或者上千万,使用BloomFilter(著名的布隆过滤器)可以解决;(3)大量数据,上亿或者几十亿,Redis可以解决。知乎爬虫给出了BloomFilter的实现,但是采用的Redis进行去重。

(8)设计模式等Java高级编程实践除了以上爬虫主要的技术点之外,知乎爬虫的实现还涉及多种设计模式,主要有链模式、单例模式、组合模式等,同时还使用了Java反射。除了学习爬虫技术,这对学习设计模式和Java反射机制也是一个不错的案例。

4. 一些抓取结果展示收起。

5. java 爬虫怎么做

代码如下:package webspider;import java.util.HashSet;import java.util.PriorityQueue;import java.util.Set;import java.util.Queue;public class LinkQueue { // 已访问的 url 集合 private static Set visitedUrl = new HashSet(); // 待访问的 url 集合 private static Queue unVisitedUrl = new PriorityQueue(); // 获得URL队列 public static Queue getUnVisitedUrl() { return unVisitedUrl; } // 添加到访问过的URL队列中 public static void addVisitedUrl(String url) { visitedUrl.add(url); } // 移除访问过的URL public static void removeVisitedUrl(String url) { visitedUrl.remove(url); } // 未访问的URL出队列 public static Object unVisitedUrlDeQueue() { return unVisitedUrl.poll(); } // 保证每个 url 只被访问一次 public static void addUnvisitedUrl(String url) { if (url != null && !url.trim().equals("") && !visitedUrl.contains(url) && !unVisitedUrl.contains(url)) unVisitedUrl.add(url); } // 获得已经访问的URL数目 public static int getVisitedUrlNum() { return visitedUrl.size(); } // 判断未访问的URL队列中是否为空 public static boolean unVisitedUrlsEmpty() { return unVisitedUrl.isEmpty(); }}配合极光HTTP使用更佳喔。

6. java 爬虫怎么做

代码如下:

package webspider;

import

java.util.HashSet;

import java.util.PriorityQueue;

import

java.util.Set;

import java.util.Queue;

public class LinkQueue {

// 已访问的 url 集合

private static Set visitedUrl

= new HashSet();

// 待访问的 url 集合

private static Queue unVisitedUrl = new

PriorityQueue();

// 获得URL队列

public static Queue getUnVisitedUrl() {

return

unVisitedUrl;

}

// 添加到访问过的URL队列中

public static void addVisitedUrl(String url)

{

visitedUrl.add(url);

}

// 移除访问过的URL

public static void removeVisitedUrl(String url)

{

visitedUrl.remove(url);

}

// 未访问的URL出队列

public static Object unVisitedUrlDeQueue() {

return

unVisitedUrl.poll();

}

// 保证每个 url 只被访问一次

public static void addUnvisitedUrl(String url)

{

if (url != null && !url.trim().equals("") &&

!visitedUrl.contains(url)

&&

!unVisitedUrl.contains(url))

unVisitedUrl.add(url);

}

// 获得已经访问的URL数目

public static int getVisitedUrlNum() {

return

visitedUrl.size();

}

// 判断未访问的URL队列中是否为空

public static boolean unVisitedUrlsEmpty()

{

return unVisitedUrl.isEmpty();

}

}配合极光HTTP使用更佳喔

转载请注明出处育才学习网 » java怎么写爬虫

知识

青蟹怎么写

阅读(244)

本文主要为您介绍青蟹怎么写,内容包括如何写三门青蟹说明书,我家的小螃蟹怎么写,小学一年级看图写话螃蟹怎么写。一天,我去爸爸单位龙湖玩儿,在湖边看见有几位叔叔在捉螃蟹,我很好奇,想观察一下。那位叔叔见我很喜欢,就送给我了一只螃蟹。回到家

知识

交流发言材料怎么写

阅读(139)

本文主要为您介绍交流发言材料怎么写,内容包括治理工作典型经验交流发言材料怎么写,党员两学一做交流发言材料怎么写,讨论会发言稿范文。开展“两学一做”,必须找准学习教育的切入点, 坚持学习与工作紧密结合,在统一思想、凝聚人心、调动积极

知识

目标定位怎么写

阅读(210)

本文主要为您介绍目标定位怎么写,内容包括目标定位怎么写,自我定位怎么写,谁能帮我以“目标与定位”写篇演讲稿。原发布者:邢庆平033我的个人定位个人定位对一个人的工作、生活起着重大的指引作用。是一个人个人形象和个人综合素质的外在体

知识

商店的英文怎么写

阅读(311)

本文主要为您介绍商店的英文怎么写,内容包括“商店”用英语怎么写,商店用英语怎么写,商店英文怎么写。商店的英文:store词汇解析store 可指普通的“商店”。除此之外还有“储备物,贮存物”的含义,也可指数量上的“丰富,大量”,此时只

知识

尺子拼音怎么写

阅读(378)

本文主要为您介绍尺子拼音怎么写,内容包括尺子的汉语拼音怎么写,尺子的尺字的拼音,直尺这个词的拼音。尺笔顺:横折,横,撇,捺。基本信息:拼音:chǐ,chě 部首:尸、四角码:77807、仓颉:so 86五笔:nyi、98五笔:nyi、

知识

房子的拼音怎么写

阅读(232)

本文主要为您介绍房子的拼音怎么写,内容包括房子的拼音怎么写、,房子的拼音怎么写、,房子的拼音音节怎么写。房 读音:fáng 部首:户 笔画:8 五行:水 五笔:YNYV 基本解释 住人或放东西的建筑物 :~屋。~产。~舍。~租。库~。楼~。

知识

预支条怎么写

阅读(220)

本文主要为您介绍预支条怎么写,内容包括工资预支条怎么写,求助预支条怎么写,我向公司里预支钱要怎么写预支条。向公司预支工资借条格式:借 条本人XX系XX公司员工,因XXX 事宜(如父母生病、孩子学费等等)需要,今从XX公司借到人民币多少元整(大

知识

你好吗的英语怎么写

阅读(194)

本文主要为您介绍你好吗的英语怎么写,内容包括你好吗用英语怎么说,《你好吗》用英语怎么说,《你好吗》用英语怎么说。一共两中表达方法:你好吗?用英语:How are you?例句:How are you getting along with your

知识

温的繁体字怎么写

阅读(186)

本文主要为您介绍温的繁体字怎么写,内容包括温的繁体字怎么写,温繁体字怎么写,温的繁体字怎么写。温的繁体字是:温。【汉字】:温【读音】:wēn【部首】:氵【笔画】:12【词组】:温温、‍温故、‍寒温、‍温酎、‍温湿、‍温裕、‍温言、

知识

五年级说明文怎么写

阅读(263)

本文主要为您介绍五年级说明文怎么写,内容包括五年级说明文怎么写,五年级的说明文怎么写,人教版五年级说明文怎样写。助读者对事物的理解。如电视机,可以分为彩色电视机和黑白电视机。作比较,即将这种事物与那种事物比较异同,从而更清楚地说明

知识

杨颖英文名怎么写

阅读(291)

本文主要为您介绍杨颖英文名怎么写,内容包括杨颖的英文名怎么写,怎么读,杨颖的英文名字怎么写,杨颖的英文名应该如何写出来呢。杨颖的英文名是angelababy,小时候的英文名是Angela,但她的同学都觉得这名字三个音太难读,加上她有Baby Fat,所以都

知识

英语11到20怎么写

阅读(162)

本文主要为您介绍英语11到20怎么写,内容包括11到20的英语单词怎么写,11到20用英语怎么读,十一到二十的英语怎么写。11至20英文原文:eleven 十一 、twelve 十二 、thirteen 十三 、fourteen 十四 、fifteen 十五

知识

生病的英文怎么写

阅读(153)

本文主要为您介绍生病的英文怎么写,内容包括生病不舒服的英文单词怎么写,生病的英文怎么写读,生病的英文怎么写读。ill,或sick, be stricken (down) with; be stricken with:意为“为……疾病所侵袭”或“患

知识

北笔画顺序怎么写

阅读(147)

本文主要为您介绍北笔画顺序怎么写,内容包括北字的笔画顺序怎么写,北笔画顺序怎么写的,北笔画顺序怎么写的。竖、横、提 、撇、竖弯钩 北 拼 音běi 部 首匕 解释 方向,早晨面对太阳,左手的一边,与“南”相对:~方。~辰(古书指北极星)。~

知识

Java短信验证码怎么写

阅读(168)

本文主要为您介绍Java短信验证码怎么写,内容包括手机短信验证码java接口怎么写,java短信验证码如何验证,手机短信验证码java接口怎么写。这个首先你要确定一下短信平台,他们会给你提供短信实现的接口文档。比如:public static String doPost(

知识

java项目经验怎么写

阅读(172)

本文主要为您介绍java项目经验怎么写,内容包括写java程序员简历,项目经验怎么写,Java项目经验怎么写,java简历项目经验怎么写。项目经验,如果你有真实的项目经验肯定要是什么写什么,当然你可以稍微夸大一些,但是太过火的话反而会让你丧失很多

知识

java文件路径怎么写

阅读(340)

本文主要为您介绍java文件路径怎么写,内容包括java里文件路径怎么写,java中怎么写文件路径,java项目路径文件怎么写。File类有两个常用方法可以得到文件路径一个是:getCanonicalPath(),另一个是:getAbsolutePath(),可以

知识

java脚本怎么写

阅读(163)

本文主要为您介绍java脚本怎么写,内容包括java脚本里怎么写javascript,什么是JAVA脚本,java脚本语言中document.write是什么意思。HTML中标签的id是唯一的,document.all返回的应该个数组,通过id去找标签,只能找到一个,就是最后一个id等于你所指

知识

java测试类怎么写

阅读(167)

本文主要为您介绍java测试类怎么写,内容包括Java的测试类怎么写,JAVA中的测试类是用来干什么的,java测试类怎么写。JAVA中的测试类是用来是用来对已经写好的功能组件进行测试的。可以有两种方法进行测试:第一种:另外新建一个带有main方法的类

知识

怎么写爬虫

阅读(170)

本文主要为您介绍怎么写爬虫,内容包括如何自己写一个网络爬虫,自己动手写网络爬虫怎么样,如何自己写一个网络爬虫。网络爬虫以叫网络蜘蛛,网络机器人,这是一个程序,其会自动的通过网络抓取互联网上的网页,这种技术一般可能用来检查你的站点上所

知识

爬虫怎么写

阅读(152)

本文主要为您介绍爬虫怎么写,内容包括如何自己写一个网络爬虫,自己动手写网络爬虫怎么样,互联网金融爬虫怎么写。网络爬虫以叫网络蜘蛛,网络机器人,这是一个程序,其会自动的通过网络抓取互联网上的网页,这种技术一般可能用来检查你的站点上所有

知识

java简历怎么写

阅读(144)

本文主要为您介绍java简历怎么写,内容包括JAVA实习生简历怎么写,java工程师简历怎么写,java实习生简历个人简介怎么写。下面是一个示例,可以看着改改。教育经历2007/09至今 xxxx大学信息学院计算机科学与技术将于2011年6月获工科学士学位项

[/e:loop]