java小说下载:Java实现智能化下载小说

以前:

按F12,看一下各个标题的url藏在哪个标签里,记一下标签名,class或者id是什么,处于什么结构层次。再打开具体章节,再按一下F12,看看正文在哪个标签下,想想怎么定位。

然后开始写代码。针对这个网站的爬虫,搞定了。

碰到另一个网站,再重复一遍以上操作

现在:

只需要传入目录页网址就可以用了

我看上谁,我就复制一下网址当参数传进去,就ok了

哪有空细看它具体结构是怎样的?这么简单的东西当然让程序自己判断了。

程序可以自动解析html,定位章节标题的位置

同时,可以自动定位正文的位置,抽取出正文

适用于大部分小说网站,不再需要为检测网页结构苦恼

public class NovelSpider { public static void main(String[] args) { String indexurl="https://www.shuyuewu.co/80039_80039538/"; int id = NovelUtil.newId(db, indexurl, "人在修仙世界,和谁都能五五开", "春风要开心"); //自动获取目录 Map<String, String> catalog = getCatalog(indexurl); List<String> urls=new ArrayList<String>(); List<String> titles=new ArrayList<String>(); for(String k:catalog.keySet()){ urls.add(k); titles.add(catalog.get(k)); } //获取各章节 for (int i = 0; i < urls.size(); i++) { String cururl=urls.get(i); String article=""; if(i!=urls.size()-1) article=getChapter(cururl,urls.get(i+1)); else article= getChapter(cururl,""); NovelUtil.saveChapter(id, titles.get(i), article, i+1); } }private static Map<String,String> getCatalog(String indexurl, Map<String, String> allpageurls, String html, Tree<HtmlNode> tree) { Map<Integer,List<Integer>> area=new HashMap<Integer,List<Integer>>(); int prekey=-1; for(int key:ListUtil.order(tree.getAllNodeKeys())){ HtmlNode leaf = tree.getNodeEntity(key); if(leaf.getLabel().toLowerCase().equals("a")){ if(prekey!=-1){ int sameTopKey = sameTopKey(tree, prekey, key); area=MapUtil.putMapList(area, sameTopKey, prekey); area=MapUtil.putMapList(area, sameTopKey, key); } prekey=key; } } int max=0; List<Integer> chapterurls=new ArrayList<Integer>(); for(Integer key:area.keySet()){ List<Integer> list = area.get(key); list=ListUtil.killSame(list); area.put(key, list); if(list.size()>max){ max=list.size(); chapterurls=list; } } for (int i:ListUtil.order(chapterurls)){ HtmlNode node = tree.getNodeEntity(i); String str = html.substring(node.getStart(),node.getEnd()+1); String httpurl=SpiderUtil.urljoin(indexurl,HtmlUtil.propertyValue(str,"href")); String v = HtmlUtil.getValue(str); if(allpageurls.containsKey(httpurl)){ allpageurls.remove(httpurl); } allpageurls.put(httpurl,v); } return allpageurls; } }

相关推荐

相关文章