Java爬虫爬取python百度百科词条及相关词条页面
2017-05-01 10:34
676 查看
Java爬虫爬取python百度百科词条及相关词条页面
本实例爬取关于python词条页面及关联词条页面的简介,把词条的简介写入txt文本中, 本实例效果:
实例基于使用第三方jar包Jsoup
1首先分析python词条页面:
可以发现其他词条的超链接都带有"/item"以及词条的简介都包含在class为lemma-summary的div里面。 超链接里面"/item"后面的字符串就是代表了那个词条的地址,所以处理的时候是这样:"https://baike.baidu.com"加上提取出来的字符串。
所以要想取得超链接以及简介的内容,可以有这两个处理方法:
处理超链接:
public void parse_a(Document document,List<String> urls) throws IOException { /*提取出href属性里面/item以及后面的字符*/ Elements links = document.select("[href*=/item]"); /*迭代输出,并且加入到url集合里面*/ for (Element link : links) { String url = "https://baike.baidu.com"+link.attr("href"); /*过滤掉重复的url地址*/ if (!urls.contains(url)) { urls.add(url); } } }
提取简介里面的内容:
public void parse_content(Document document,List<String> contents ) { /*使用Jsoup里面的选择器,详细用法可以查看jsoup的官方文档*/ Elements links = document.select("div.lemma-summary"); for(Element link:links){ contents.add(link.text()); } }
关于jsoup可以查看官方文档,简单易上手。
2通过url获取页面用于解析:
利用jsoup的Jsoup.connect(url).get()。
代码:
public static Document getDom(String url) throws IOException { Document document = Jsoup.connect(url).get(); return document; }
3URL管理器,本实例需要从当前页面获取超链接并且不断获取新的词条页面的URL
/*设置迭代顺序,从第一个开始迭代*/ int i=0; public void getNewURL(List<String> urls) throws IOException { /*从url集合里面获取一个并且进行解析*/ Document document = ConnectNet.getDom(urls.get(i)); i+=1; Elements links = document.select("[href*=/item]"); /*通过迭代循环,不断往url集合里面添加新的URL*/ for (Element link : links) { String url = "https://baike.baidu.com"+link.attr("href"); if(!urls.contains(url)) { urls.add(url); } } }
4储存数据,把获得的简介数据添加进txt文本中
public void store_contents(List<String> contents) throws IOException { File file = new File("my6.txt"); FileWriter fileWriter = new FileWriter(file); for(int i=0;i<contents.size();i++) { fileWriter.write(contents.get(i)); /*换行和分隔*/ fileWriter.write("\r\n"); fileWriter.write("-----------"); fileWriter.write("\r\n"); fileWriter.flush(); } }
下面贴出完整代码:
URL管理器:
package myspyder;
import java.io.IOException;
import java.util.List;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class URLManager {
/*设置迭代顺序,从第一个开始迭代*/ int i=0; public void getNewURL(List<String> urls) throws IOException { /*从url集合里面获取一个并且进行解析*/ Document document = ConnectNet.getDom(urls.get(i)); i+=1; Elements links = document.select("[href*=/item]"); /*通过迭代循环,不断往url集合里面添加新的URL*/ for (Element link : links) { String url = "https://baike.baidu.com"+link.attr("href"); if(!urls.contains(url)) { urls.add(url); } } }
}
存储类:
package myspyder;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
public class Store {
public void store_contents(List<String> contents) throws IOException { File file = new File("my6.txt"); FileWriter fileWriter = new FileWriter(file); for(int i=0;i<contents.size();i++) { fileWriter.write(contents.get(i)); /*换行和分隔*/ fileWriter.write("\r\n"); fileWriter.write("-----------"); fileWriter.write("\r\n"); fileWriter.flush(); } }
}
获取DOM对象类:
package myspyder;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class ConnectNet {
public static Document getDom(String url) throws IOException { Document document = Jsoup.connect(url).get(); return document; }
}
网页解析类:
package myspyder;
import java.io.IOException;
import java.net.CookieHandler;
import java.util.List;
import java.util.Set;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class ParseHtml {
int num=1;
public void parse_a(Document document,List<String> urls) throws IOException { /*提取出href属性里面/item以及后面的字符*/ Elements links = document.select("[href*=/item]"); /*迭代输出,并且加入到url集合里面*/ for (Element link : links) { String url = "https://baike.baidu.com"+link.attr("href"); /*过滤掉重复的url地址*/ if (!urls.contains(url)) { urls.add(url); } } }
public void parse_content(Document document,List<String> contents ) { /*使用Jsoup里面的选择器,详细用法可以查看jsoup的官方文档*/ Elements links = document.select("div.lemma-summary"); for(Element link:links){ contents.add(link.text()); } }
}
启动类:
package myspyder; import java.io.IOException; import java.net.URLStreamHandler; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class StartSpyder { public static void main(String[] args) throws IOException { /*根url,python词条页面*/ String rooturl = "http://baike.baidu.com/link?url=y9cRcLYxzn5I12dTAXUqJJuY50B0TVvsdkeqmHetkVfkRlXGxUa0tFL53dQwpSQaF7js4yRmTwLjqXyJN-hWWK"; Document rootdocument = Jsoup.connect(rooturl).get(); int index=1; ParseHtml parseHtml = new ParseHtml(); ConnectNet connectNet = new ConnectNet(); Store store = new Store(); /*放置要迭代的url*/ List<String> urls = new ArrayList<>(); /*放置简介字符串*/ List<String> contents = new ArrayList<>(); parseHtml.parse_a(rootdocument, urls); URLManager urlManager = new URLManager(); /*纯粹用来计数*/ int flag=1; /* * 首先判断url集合里面是否还有可以爬取的url,然后从中按照顺序获取一个URL * 然后URL管理器继续进行添加新的url,从提取出的URL获取dom对象,进行解析,存入txt文本, * 循环进行,直到没有新的url可以爬取。 */ while(urls!=null) { String url = urls.get(index-1); index+=1; urlManager.getNewURL(urls); Document document = connectNet.getDom(url); parseHtml.parse_content(document, contents); store.store_contents(contents); System.out.println("StartSpyder.main()"); System.out.println(flag); flag+=1; } } }
相关文章推荐
- Python爬虫----实例: 抓取百度百科Python词条相关1000个页面数据
- 慕课爬虫实战 爬取百度百科Python词条相关1000个页面数据
- 实践项目十:爬取百度百科Python词条相关1000个页面数据(慕课简单爬虫实战)
- Python基础爬虫实战实例----爬取1000个Python百度百科词条及相关词条的标题和简介
- 编写Python代码——爬取百度百科Python词条相关1000个页面数据【未完慕课】
- [Python爬虫]爬取百度百科python相关的1000个页面
- Python爬虫,爬取百度百科词条
- Python开发爬虫爬取百度百科词条信息(源码下载)
- 优酷电视剧爬虫代码实现一:下载解析视频网站页面(4)补充: Java正则表达式Matcher.group(int group)相关类解析
- python爬虫-百度百科词条
- Python爬虫完整案例 - 爬取百度百科词条信息
- Python开发简单爬虫(二)---爬取百度百科页面数据
- 使用python爬取百度百科python词条相关的1000个网页的标题和简介
- Python 简易网络爬虫的编写——抓取任意页面数目百度百科内容
- 用Python进行简单的爬虫(从Python百度百科中提取词条)
- Python3_第一个简单爬虫开发_爬取百度百科1000个词条_参照慕课网教程实现
- 第一个python爬虫(python3爬取百度百科1000个页面)
- python爬虫-百度百科词条
- Python 爬虫的实践运用(1)--爬取百度百科的词条
- python爬虫-百度百科词条