导航:首页 > 编程语言 > java爬虫解析html

java爬虫解析html

发布时间:2025-02-24 23:48:26

A. 求java网络爬虫判断要抓取的网页是否更新的代码

在进行Java网络爬虫开发时,判断要抓取的网页是否更新是一个重要的环节。通常,304状态码是由浏览器缓存机制引起的,并不能直接用于判断服务器端网页是否更新。因此,你的爬虫需要采用一种基于服务器的时间戳或哈希值的方法来判断网页是否更新。

具体做法是,你可以设定一个定时任务,定期抓取目标网页,并将抓取到的内容与你本地数据库中的内容进行对比。如果内容没有变化,就不进行进一步操作。这种方法适用于需要定期更新数据的场景。

如果你的项目需求是进行数据分析或数据存储,通常不需要过多关注具体的爬虫逻辑。可以使用现成的爬虫框架,如Scrapy,来持续抓取网站信息。通过解析抓取到的链接,进一步获取数据并存储到数据库中,建立相应的索引以便后续查询使用。

此外,还可以考虑使用一些第三方库,如jsoup,它提供了较为丰富的HTML解析功能,有助于简化爬虫开发过程。同时,考虑到网站的变动情况,建议定期更新抓取规则,确保数据的准确性和时效性。

总之,判断网页是否更新的关键在于找到一种有效的方法来存储和比较网页内容。通过定时抓取、数据库对比或使用现成的爬虫框架,可以实现这一目标,提高数据抓取的效率和准确性。

B. Java源码 实现网络爬虫

//Java爬虫demo

importjava.io.File;
importjava.net.URL;
importjava.net.URLConnection;
importjava.nio.file.Files;
importjava.nio.file.Paths;
importjava.util.Scanner;
importjava.util.UUID;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;

publicclassDownMM{
publicstaticvoidmain(String[]args)throwsException{
//out为输出的路径,注意要以\结尾
Stringout="D:\JSP\pic\java\";
try{
Filef=newFile(out);
if(!f.exists()){
f.mkdirs();
}
}catch(Exceptione){
System.out.println("no");
}

Stringurl="http://www.mzitu.com/share/comment-page-";
Patternreg=Pattern.compile("<imgsrc="(.*?)"");
for(intj=0,i=1;i<=10;i++){
URLuu=newURL(url+i);
URLConnectionconn=uu.openConnection();
conn.setRequestProperty("User-Agent","Mozilla/5.0(WindowsNT6.3;WOW64;Trident/7.0;rv:11.0)likeGecko");
Scannersc=newScanner(conn.getInputStream());
Matcherm=reg.matcher(sc.useDelimiter("\A").next());
while(m.find()){
Files.(newURL(m.group(1)).openStream(),Paths.get(out+UUID.randomUUID()+".jpg"));
System.out.println("已下载:"+j++);
}
}
}
}

C. Java网络爬虫怎么实现

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。x0dx0a传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。对于垂直搜索来说,聚焦爬虫,即有针对性地爬取特定主题网页的爬虫,更为适合。x0dx0ax0dx0a以下是一个使用java实现的简单爬虫核心代码:x0dx0apublic void crawl() throws Throwable { x0dx0a while (continueCrawling()) { x0dx0a CrawlerUrl url = getNextUrl(); //获取待爬取队列中的下一个URL x0dx0a if (url != null) { x0dx0a printCrawlInfo(); x0dx0a String content = getContent(url); //获取URL的文本信息 x0dx0a x0dx0a //聚焦爬虫只爬取与主题内容相关的网页,这里采用正则匹配简单处理 x0dx0a if (isContentRelevant(content, this.regexpSearchPattern)) { x0dx0a saveContent(url, content); //保存网页至本地 x0dx0a x0dx0a //获取网页内容中的链接,并放入待爬取队列中 x0dx0a Collection urlStrings = extractUrls(content, url); x0dx0a addUrlsToUrlQueue(url, urlStrings); x0dx0a } else { x0dx0a System.out.println(url + " is not relevant ignoring ..."); x0dx0a } x0dx0a x0dx0a //延时防止被对方屏蔽 x0dx0a Thread.sleep(this.delayBetweenUrls); x0dx0a } x0dx0a } x0dx0a closeOutputStream(); x0dx0a}x0dx0aprivate CrawlerUrl getNextUrl() throws Throwable { x0dx0a CrawlerUrl nextUrl = null; x0dx0a while ((nextUrl == null) && (!urlQueue.isEmpty())) { x0dx0a CrawlerUrl crawlerUrl = this.urlQueue.remove(); x0dx0a //doWeHavePermissionToVisit:是否有权限访问该URL,友好的爬虫会根据网站提供的"Robot.txt"中配置的规则进行爬取 x0dx0a //isUrlAlreadyVisited:URL是否访问过,大型的搜索引擎往往采用BloomFilter进行排重,这里简单使用HashMap x0dx0a //isDepthAcceptable:是否达到指定的深度上限。爬虫一般采取广度优先的方式。一些网站会构建爬虫陷阱(自动生成一些无效链接使爬虫陷入死循环),采用深度限制加以避免 x0dx0a if (doWeHavePermissionToVisit(crawlerUrl) x0dx0a && (!isUrlAlreadyVisited(crawlerUrl)) x0dx0a && isDepthAcceptable(crawlerUrl)) { x0dx0a nextUrl = crawlerUrl; x0dx0a // System.out.println("Next url to be visited is " + nextUrl); x0dx0a } x0dx0a } x0dx0a return nextUrl; x0dx0a}x0dx0aprivate String getContent(CrawlerUrl url) throws Throwable { x0dx0a //HttpClient4.1的调用与之前的方式不同 x0dx0a HttpClient client = new DefaultHttpClient(); x0dx0a HttpGet httpGet = new HttpGet(url.getUrlString()); x0dx0a StringBuffer strBuf = new StringBuffer(); x0dx0a HttpResponse response = client.execute(httpGet); x0dx0a if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) { x0dx0a HttpEntity entity = response.getEntity(); x0dx0a if (entity != null) { x0dx0a BufferedReader reader = new BufferedReader( x0dx0a new InputStreamReader(entity.getContent(), "UTF-8")); x0dx0a String line = null; x0dx0a if (entity.getContentLength() > 0) { x0dx0a strBuf = new StringBuffer((int) entity.getContentLength()); x0dx0a while ((line = reader.readLine()) != null) { x0dx0a strBuf.append(line); x0dx0a } x0dx0a } x0dx0a } x0dx0a if (entity != null) { x0dx0a nsumeContent(); x0dx0a } x0dx0a } x0dx0a //将url标记为已访问 x0dx0a markUrlAsVisited(url); x0dx0a return strBuf.toString(); x0dx0a}x0dx0apublic static boolean isContentRelevant(String content, x0dx0aPattern regexpPattern) { x0dx0a boolean retValue = false; x0dx0a if (content != null) { x0dx0a //是否符合正则表达式的条件 x0dx0a Matcher m = regexpPattern.matcher(content.toLowerCase()); x0dx0a retValue = m.find(); x0dx0a } x0dx0a return retValue; x0dx0a}x0dx0apublic List extractUrls(String text, CrawlerUrl crawlerUrl) { x0dx0a Map urlMap = new HashMap(); x0dx0a extractHttpUrls(urlMap, text); x0dx0a extractRelativeUrls(urlMap, text, crawlerUrl); x0dx0a return new ArrayList(urlMap.keySet()); x0dx0a} x0dx0aprivate void extractHttpUrls(Map urlMap, String text) { x0dx0a Matcher m = (text); x0dx0a while (m.find()) { x0dx0a String url = m.group(); x0dx0a String[] terms = url.split("a href=\""); x0dx0a for (String term : terms) { x0dx0a // System.out.println("Term = " + term); x0dx0a if (term.startsWith("http")) { x0dx0a int index = term.indexOf("\""); x0dx0a if (index > 0) { x0dx0a term = term.substring(0, index); x0dx0a } x0dx0a urlMap.put(term, term); x0dx0a System.out.println("Hyperlink: " + term); x0dx0a } x0dx0a } x0dx0a } x0dx0a} x0dx0aprivate void extractRelativeUrls(Map urlMap, String text, x0dx0a CrawlerUrl crawlerUrl) { x0dx0a Matcher m = relativeRegexp.matcher(text); x0dx0a URL textURL = crawlerUrl.getURL(); x0dx0a String host = textURL.getHost(); x0dx0a while (m.find()) { x0dx0a String url = m.group(); x0dx0a String[] terms = url.split("a href=\""); x0dx0a for (String term : terms) { x0dx0a if (term.startsWith("/")) { x0dx0a int index = term.indexOf("\""); x0dx0a if (index > 0) { x0dx0a term = term.substring(0, index); x0dx0a } x0dx0a String s = //" + host + term; x0dx0a urlMap.put(s, s); x0dx0a System.out.println("Relative url: " + s); x0dx0a } x0dx0a } x0dx0a } x0dx0a x0dx0a}x0dx0apublic static void main(String[] args) { x0dx0a try { x0dx0a String url = ""; x0dx0a Queue urlQueue = new LinkedList(); x0dx0a String regexp = "java"; x0dx0a urlQueue.add(new CrawlerUrl(url, 0)); x0dx0a NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L, x0dx0a regexp); x0dx0a // boolean allowCrawl = crawler.areWeAllowedToVisit(url); x0dx0a // System.out.println("Allowed to crawl: " + url + " " + x0dx0a // allowCrawl); x0dx0a crawler.crawl(); x0dx0a } catch (Throwable t) { x0dx0a System.out.println(t.toString()); x0dx0a t.printStackTrace(); x0dx0a } x0dx0a}

D. java中几种解析html的工具

HTML分析是一个比较复杂的工作,Java世界主要有几款比较方便的分析工具:

1.Jsoup
Jsoup是一个集强大和便利于一体的HTML解析工具。它方便的地方是,可以用于支持用jQuery中css selector的方式选取元素,这对于熟悉js的开发者来说基本没有学习成本。

String content = "blabla";
Document doc = JSoup.parse(content);
Elements links = doc.select("a[href]");

阅读全文

与java爬虫解析html相关的资料

热点内容
京东健康码在哪个文件夹里 浏览:891
数据线黑了怎么消除 浏览:883
iphone6快捷锁屏 浏览:55
诸神黄昏源代码 浏览:220
易我数据恢复向导怎么用 浏览:134
pdf文件怎么合并或拆分 浏览:702
jsp接受多选框 浏览:494
悦跑圈路线的文件格式 浏览:813
explore所在文件夹 浏览:952
win10会员计划怎么取消了 浏览:196
如何修改苹果电脑用户名和密码 浏览:164
win7电脑右下角的网络连接图标不见 浏览:735
怎么把ps文件变成源文件 浏览:807
如何把图片放进这个文件夹 浏览:530
谁有qq认证图标复制 浏览:881
2014年web服务器测试工具 浏览:192
win7镜像文件怎么用 浏览:983
多数据can怎么发送 浏览:997
什么是夏威夷果种植技术app 浏览:160
上海学习编程哪个地方好 浏览:958

友情链接