首页 > 学院 > 开发设计 > 正文

htmlparse的简单使用--------爬取电影网页的全部下载链接

2019-11-10 18:42:30
字体:
来源:转载
供稿:网友

1前期准备,下载htmlparse压缩包并配置到eclipse上,到下面网址可以下载

http://htmlparser.sourceforge.net/ 1 7 2 3 4 现在我们就可以导入和使用htmlparser了 2.网页的分析与根据网页源码使用htmlparse

1、这里先分析与获取一个电影介绍页面的内容

5 现在我们来查看网页源代码 6

好、我们现在先来获取一个页面的下载链接

/** * 获取一个页面的下载链接 */ public static String getMoiveDownloadUrl(String moiveIntroUrl) { //页面下载连接保存在这里 String moiveDownLoadUrl = ""; try { //首先根据页面URL建立一个Parser. Parser parser = new Parser(moiveIntroUrl);//使用parser中extractAllNodesThatMatch方法,这个有许多的过滤器,可以帮助我们过滤出我们想要的内容,具体可以看api的介绍//这里我们使用链接文本过滤器,可以过滤出链接里面含ftp的内容,这样就可以取出我们想要的链接 NodeList nodelist = parser.extractAllNodesThatMatch(new LinkStringFilter("ftp")); for (int i = 0; i < nodelist.size(); i++) { LinkTag tag = (LinkTag) nodelist.elementAt(i); moiveDownLoadUrl = tag.getLink(); } } catch (ParserException e) { e.PRintStackTrace(); } return moiveDownLoadUrl; }2、获取一个分页里的所有电影介绍页面 8 9/** * 获取一个分页里的所有电影介绍页面 */ public static List getAllMoiveUrlFromOneList(String pageListUrl) {//将链接地址以集合的形式返回出去 List<String> allMoiveUrl = new ArrayList<String>(); try { Parser parser = new Parser(pageListUrl);//这里我们使用属性过滤器,可以帮助我们过滤一些属性特殊或者属性里面值唯一的标签 NodeList nodelist = parser.extractAllNodesThatMatch(new HasAttributeFilter("class", "ulink")); for (int i = 0; i < nodelist.size(); i++) { LinkTag tag = (LinkTag) nodelist.elementAt(i);//将取出的分页链接拼接一下,放入到集合中来。 allMoiveUrl.add("http://www.ygdy8.net" + tag.getLink()); } } catch (ParserException e) { e.printStackTrace(); } return allMoiveUrl; }3、获取电影网里面的所有分页 10 11/** * 获取电影网里面的所有的分页 */ public static List getAllPage() {//将链接地址以集合的形式返回出去 List<String> allPage = new ArrayList<String>(); try { Parser parser = new Parser("http://www.ygdy8.net/html/gndy/dyzz/index.html"); NodeList nodelist = parser.extractAllNodesThatMatch(new TagNameFilter("option")) .extractAllNodesThatMatch(new HasAttributeFilter("value")); for (int i = 0; i < nodelist.size(); i++) { OptionTag tag = (OptionTag) nodelist.elementAt(i); if(tag.getAttribute("value").contains("list")){ allPage.add("http://www.ygdy8.net/html/gndy/dyzz/" + tag.getAttribute("value")); } } } catch (ParserException e) { e.printStackTrace(); } return allPage; }

我们到现在就可以得到全部分页的链接,各个电影介绍页面的链接,介绍页面里的下载链接。接下来我们要做的就是将这三个方法整合起来,获得全部电影的下载链接

/** * 功能:保存数据到文件中 * * @param content * 要保存的内容 * @param fileName * 目标文件名(路径) */ public static boolean writeContentToFileTwo(String content, String fileName) { boolean flag = false; try { PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(fileName,true))); pw.println(); pw.print(content); pw.flush(); pw.close(); flag = true; } catch (FileNotFoundException e) { e.printStackTrace(); flag = false; } return flag; }public static List getAllMoive() { List<String> movieList = new ArrayList<String>(); // 得到全部的分页链接 List<String> allPage = getAllPage(); for (Iterator iterator = allPage.iterator(); iterator.hasNext();) { String pageListUrl = (String) iterator.next(); List<String> allMoiveUrl = getAllMoiveUrlFromOneList(pageListUrl); for (Iterator iterator2 = allMoiveUrl.iterator(); iterator2.hasNext();) { String moiveIntroUrl = (String) iterator2.next(); String moiveDownLoadUrl = getMoiveDownloadUrl(moiveIntroUrl); writeContentToFileTwo(moiveDownLoadUrl,"a.txt"); movieList.add(moiveDownLoadUrl); } } return movieList ; } public static void main(String[] args) { getAllMoive(); }

效果截图 12

3.分析与总结

其实这个工具的使用是不复杂的,流程也很清晰,问题的关键在于如何在一个庞大的html页面中获取你想要的内容,可以多一点查看各种的节点过滤器,它可以帮助我们选出我们想要的内容,每次在爬取网页之前我们都要花大量时间去分析一个网页,找到我们想要的内容,不能多也不能少,这我觉得才是爬虫的使用的重点


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表