Java爬虫爬取python百度百科词条及相关词条页面
来源:互联网 发布:c 判断是域名还是ip 编辑:程序博客网 时间:2024/05/22 15:45
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;}}}
0 0
- Java爬虫爬取python百度百科词条及相关词条页面
- Python爬虫,爬取百度百科词条
- Python爬虫爬取百度百科词条
- 简单的python爬虫(爬取百度百科词条)
- 实践项目十:爬取百度百科Python词条相关1000个页面数据(慕课简单爬虫实战)
- python爬虫-百度百科词条
- python爬取百度百科词条内容
- java爬取百度百科词条
- Python爬虫----实例: 抓取百度百科Python词条相关1000个页面数据
- Python3爬虫之四简单爬虫架构【爬取百度百科python词条网页】
- 编写Python代码——爬取百度百科Python词条相关1000个页面数据【未完慕课】
- Python 爬虫的实践运用(1)--爬取百度百科的词条
- Python网络爬虫(三):连续爬取百度百科词条数据
- Python开发爬虫爬取百度百科词条信息(源码下载)
- Python简单爬虫开发的学习笔记整理(爬取百度百科词条)
- 按条件爬取百度百科词条及其相关词条的ID
- 使用python爬取百度百科python词条相关的1000个网页的标题和简介
- Python 爬取百度词条Python Demo
- 爬虫phantomjs爬取网页中文乱码
- IntelliJ IDEA 2016.3.5安装图文教程(附激活码)
- CCF NOI1079 合法C标识符
- 僵尸进程和孤儿进程
- cause java.lang.NoSuchMethodError: antlr.collection
- Java爬虫爬取python百度百科词条及相关词条页面
- html5第七课时,页面作业
- windows 10 下安装 tensorflow 1.0
- android 开源库osmdroid绘制点线面(比例尺,缩小放大,导航图标等)
- win7系统IIS环境搭建
- 190_IO流_FileReader_Writer完成文件复制
- 深度学习的几种库
- 征服 Mongodb 之 主从复制&集群复制
- 案例——商品展示 菜鸟级别的我