介绍
小编给大家分享一下java如何实现爬虫爬网站图片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>第一步,实现LinkQueue,对url进行过滤和存储的操作强>
import java.util.ArrayList;, import java.util.Collections, import java.util.HashSet, import 并不知道, import java.util.Set, {public class  LinkQueue //才能,已访问的,url 集合, private 才能static Set< String>, visitedUrl =, Collections.synchronizedSet (new HashSet< String> ()),,//才能,未访问的url private 才能static List< String>, unVisitedUrl =, Collections.synchronizedList (new ArrayList< String> ()),,//才能,未访问的URL出队列, public 才能static String  unVisitedUrlDeQueue (), {, ,,,if (unVisitedUrl.size(),祝辞,0),{, ,,,,,String url =, unVisitedUrl.remove (0),, ,,,,,visitedUrl.add (url),, ,,,,,return url,, ,,,}, ,,,return 零,, ,,},//才能,新添的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 boolean  unVisitedUrlsEmpty (), {, ,,,return unVisitedUrl.isEmpty (),, ,,}, }
<强>第二步,收集每一个url下的链接进行过滤产生新的链接强>
import java.util.HashSet;, import java.util.Set, import org.htmlparser.Node, import org.htmlparser.NodeFilter, import org.htmlparser.Parser, import org.htmlparser.filters.NodeClassFilter, import org.htmlparser.filters.OrFilter, import org.htmlparser.tags.LinkTag, import org.htmlparser.util.NodeList, import org.htmlparser.util.ParserException,/* *, ,*过滤http的url,获取可以符合规则的url ,* @author Administrator *大敌; ,*/{public class  ParserHttpUrl //,才能获取一个网站上的链接,filter 用来过滤链接, public 才能static Set< String>, extracLinks (String url, LinkFilter 过滤器),{, ,,,Set, links =, new HashSet ();, ,,,try {, ,,,,,Parser Parser =, new 解析器(url),, ,,,,,//,过滤,& lt; frame 在标签的,过滤器,用来提取,frame 标签里的,src 属性所表示的链接, ,,,,,NodeFilter frameFilter =, new NodeFilter (), {, ,,,,,,,public boolean 接受(Node 节点),{, ,,,,,,,,,if (node.getText () .startsWith (“frame  src=https://www.yisu.com/zixun/?) { 返回true; 其他}{ 返回错误; } } };//OrFilter来设置过滤<一>标签,和<框架>标签 OrFilter linkFilter=new OrFilter(新NodeClassFilter ( LinkTag.class), frameFilter);//得到所有经过过滤的标签 节点列表列表=parser.extractAllNodesThatMatch (linkFilter); for (int i=0;我 标签 { LinkTag链接=(LinkTag)标记; 字符串linkUrl=link.getLink ();//url 如果(filter.accept (linkUrl)) links.add (linkUrl); }//<框架>其他标签 {//提取帧里src属性的链接如<帧src=" test.html "/> 字符串?tag.getText (); int开始=frame.indexOf (" src="); ?frame.substring(开始); int=帧结束。indexOf (" "); 如果(==1) 结束=frame.indexOf (“>”); 字符串frameUrl=框架。substring (5 - 1); 如果(filter.accept (frameUrl)) links.add (frameUrl); } } }捕捉(ParserException e) { e.printStackTrace (); } 返回链接; } }
<强>第三步,实现图片下载功能,强>
import java.io.File;, import java.io.FileOutputStream, import java.io.InputStream, import java.net.URL, import java.net.URLConnection, import java.util.ArrayList, import 并不知道, import java.util.regex.Matcher, import java.util.regex.Pattern,/* * *, *大敌;java抓取网络图片, *大敌; ,* @author swinglife *大敌; null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nulljava如何实现爬虫爬网站图片