Java爬虫爬取python百度百科词条及相关词条页面

利用Jsoup爬取百度搜索内容及链接生成对应Excel 最近有朋友遇到需求,说要整理百度搜索结果中的数据,再此小做了下demo。 爬取结果: 话不多说,直接贴代码。 所需依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <v... 阅读详情

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;
		}

	}

}
Java网络爬虫爬取百度页面 最近看到网上介绍爬虫的文章,觉得很有趣,那么心动不如行动,晚上回来的时间刚好用来码代码啦~~ 网络爬虫:按照一定的规则爬取网页上的信息,通常是爬取到一些URL之后然后对这些URL放入队列在一次次的进行搜索,具体不知道是DFS还是BFS了,这里的算法我没咋研究,因为本次做的爬虫实例比较简单,实现一个Java小程序,用来爬取百度页面的LOGO。 事实上爬虫的作用远大于此,本次例子仅为入门参考使用。 阅读详情

相关推荐

【python数据挖掘课程】二十四.KMeans文本聚类分析互动百科语料

这是《Python数据挖掘课程》系列文章,也是我上课内容及书籍中的一个案例。本文主要讲述文本聚类相关知识,包括中文分词、数据清洗、特征提取、TF-IDF、KMeans聚类等步骤。 本篇文章为基础性文章,希望对你有所帮助,提供些思路,也是自己教学的内容。如果文章中存在错误或不足之处,还请海涵。同时,推荐大家阅读我以前的文章了解其他知识。 前文参考:【Python数据挖掘课程】一.安装Pyth...

杨秀璋的专栏 1万+

java爬虫利器Jsoup的使用

对于长期使用java做编程的程序猿应该知道,java支持的爬虫框架还是有很多的,如:ebMagic、Spider、Jsoup等。今天我们就用Jsoup来实现一个小小的爬虫程序,Jsoup作为kava的HTML解析器,可以直接对某个URL地址、HTML文本内容进行解析,

weixin_44617651的博客 1566

从AT指令到万物互联:移远EG800K-CN模块的协议栈深度解析与实践指南

本文深度解析移远EG800K-CN 4G模块的协议栈架构与AT指令体系,涵盖MQTT云端集成、多协议配置优化及工业级故障排除指南。通过实战示例展示如何利用该模块构建稳定可靠的物联网连接方案,实现从设备到云端的万物互联。

jupyter5notebook的博客 361

java爬虫

需求:爬取百度百科内容,并进行解析。 (1)步骤: 抓取页面数据(使用HttpClient得到html) 解析页面数据(使用Jsoup解析html的文本内容) PS:jsoup的功能(了解) 1)从一个URL,文件或字符串中解析HTML 2)使用DOM或CSS选择器来查找、取出数据 3)可操作HTML元素、属性、文本 (2)具体操作: 1.新建maven项目 2.修改pom文件,引入依赖 <!--引入httpclient:支持 HTTP 协议的客户端编程工具包--> <dep

wind的博客 300

RM机器人麦轮底盘实战:从零搭建到PID调参全记录(附避坑指南)

本文详细记录了RM机器人麦轮底盘从零搭建到PID调参的全过程,涵盖硬件组装、开发环境搭建、底盘解算和PID调参等关键步骤,并附有实用的避坑指南。特别针对麦轮控制、底盘解算和电机调试等核心问题提供了专业解决方案,帮助开发者快速提升机器人性能。

bush的博客 369

基于LSTM语义分析的企业风险预测系统

在数字化时代,企业面临着前所未有的挑战和机遇,而风险管理作为确保企业稳定发展的关键一环,其重要性日益凸显。为了及时、准确地监测和分析企业相关的风险,并预测可能带来的风险,本文介绍了一种基于长短期记忆(LSTM)语义分析的企业风险预测系统。该系统利用深度学习技术,通过将收集到的企业数据进行预处理和分析,结合LSTM模型对文本进行深度语义分析,从而实现对潜在风险的预测和评估。系统设计方面,该系统包括数据预处理、LSTM模型构建与训练、风险预测以及可视化展示等模块。

qiufangtaowvnyyidtf的博客 1390

java+jsoup实现简单的爬虫 简单爬取百度百度实时热点

架构:Maven + MyBatis + MySQL+ Mapper+ Jsoup 先上整体架子 数据库表设计 下面就开始上代码了 Day01_BaiduNewsCrawler package edu.xawl.main; import edu.xawl.mapper.BaiduNewsMapper; import edu.xawl.po.BaiduNews...

su1177的博客 3015

Python中的字典(Dictionary)学习

上一章节,我们学习了列表(List) 和 元组(tuple) 来表示有序集合。而我们在讲列表(list)的时候,我们用了列表(list) 来存储用户的姓名。那么如果我们为了方便联系这些童鞋,要把电话号码也添加进去,该怎么做呢?但是这样很不方便,我们把电话号码记录下来,就是为了有什么事能及时联系上这些童鞋。如果用列表来存储这些,列表越长,我们查找起来耗时就越长。

热情、奔放、快乐编程! 502

视频教程-Python网络爬虫开发与项目实战-Python

Python网络爬虫开发与项目实战 20年软件项目开发管理经验 工信部人才交...

weixin_34811089的博客 804

【WorkBuddy专栏】完结篇暨付费专栏总目录(内容继续更新中)

【WorkBuddy专栏】完结篇和付费内容总目录

AI人人懂 907

GEE:基于MODIS数据计算NDVI时间序列,并使用Savatsky-Golay(SG)滤波器对其进行平滑处理

优快云@_养乐多_本文将介绍如何在 Google Earth Engine (GEE) 平台中,使用 MODIS 数据计算 NDVI 时间序列,并对该数据集应用 Savitzky-Golay 滤波器,得到了一个新的平滑后的数据集。Savitzky-Golay 滤波器可以有效地去除信号中的噪声,并平滑信号的变化。该方法可以扩展到基于 MODIS 数据计算的任何指数或者波段。

养乐多的博客 1422

百度百科词条相关词条网页-标题和简介爬取

题目描述:百度百科词条相关词条网页-标题和简介爬取 from bs4 import BeautifulSoup from urllib import request url = "http://baike.baidu.com/item/Python/407313" #第一种下载网页的方法 print("第一种方法:") #request = urllib.urlopen(url) python2.x用法 response1 = request.urlopen(url) print("状态码:",resp

winnerziqi的博客 639

Flutter 自适应布局一套代码适配手机和平板(12)

通过LayoutBuilder组件动态检测屏幕尺寸,根据宽度阈值(600px)选择不同布局方式。在小屏幕上显示单页联系人分组,大屏幕采用侧边栏+详情面板的并排布局。核心实现包括:1)使用LayoutBuilder获取父容器约束条件;2)定义大屏幕和小屏幕的布局断点;3)构建响应式界面组件,其中大屏幕布局采用Row横向排列固定宽度侧边栏和弹性宽度的详情区域。这种方案可确保应用在不同设备上都能提供最佳显示效果。

hello.reader 315

java 爬 维基百科_urllib和BeautifulSoup爬取维基百科的词条简单实例

本文实例主要实现的是使用urllib和BeautifulSoup爬取维基百科的词条,具体如下。简洁代码:#引入开发包from urllib.request import urlopenfrom bs4 import BeautifulSoupimport re#请求URL并把结果用UTF-8编码resp=urlopen("https://zh.wikipedia.org/wiki/Wikipedi...

weixin_42554408的博客 494

分布式系统中的“无状态”和“有状态”详解

有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如 tomcat 中的 session。例如登录:用户登录后,我们把登录者的信息保存在服务端 session 中,并且给用户一个 cookie 值,记录对应的 session。然后下次请求,用户携带 cookie 值来,我们就能识别到对应 session,从而找到用户的信息。

AI天才研究院 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

浅谈python【网络爬虫】

【网络爬虫】 如果python基础知识学的差不多了,那么用【爬虫】来练手是一个即简单又富有成就感的方式了;那么我们先简单聊聊【网络爬虫】是一个什么东西? 1.什么是【网络爬虫】? MBA智库百科写道:“网络爬虫又名‘网络蜘蛛’,是通过网页的链接地址来寻找网页,从网站某一个页面开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到按照某种策略把互联网上所有的网页都抓取完为止的技术。” 看完可能还是不太懂对吧?那我们做一个比喻:我们知道互联网或者说因特网是可

洪博hopes的博客 698

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python java爬虫_Java爬虫(二)

上一篇简单的实现了获取url返回的内容,在这一篇就要第返回的内容进行提取,并将结果保存到html中。而且这个爬虫是基于python爬虫的java语言实现,其逻辑大致相同。一 、 需求:抓取主页面:百度百科Python词条 https://baike.baidu.com/item/Python/407313分析上面的源码格式,便于提取:关键词分析:位于class为lemmaWgt-lemmaTi...

weixin_39725885的博客 336

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python爬虫系统简介_Python3基础爬虫简介

python3 基础爬虫入门心得第一次写博客,有点紧张,不喜勿喷。如果有不足之处,希望读者指出,本人一定改正。学习爬虫之前你需要了解(个人建议,铁头娃可以无视):- **少许网页制作知识,起码要明白什么标签...**- **相关语言基础知识。比如用java做爬虫起码会用Java语言,用python做爬虫起码要会用python语言...**- **一些网络相关知识。比如TCP/IP、cookie之类...

weixin_39988779的博客 231

慕课网项目:Python开发简单爬虫学习笔记

课程链接Python开发简单爬虫   0.必要说明 我的java版本1.8,python版本3.6,eclipse版本4.5,BeautfilSoup版本4。 视频中用到的python版本2.7。 有几个坑需要注意: python3.6不支持urllib2。而是换位:urllib。 百度百科页面模式变了,所以我们爬的话需要改变策略。 1.爬虫简介  爬虫:一段自动抓取互联网信息的...

chielong's csdn 487

Java爬虫(二)

     上一篇简单的实现了获取url返回的内容,在这一篇就要第返回的内容进行提取,并将结果保存到html中。而且这个爬虫是基于python爬虫的java语言实现,其逻辑大致相同。   一 、 需求:   抓取主页面:百度百科Python词条   https://baike.baidu.com/item/Python/407313      分析上面的源码格式,便于提取: 关键...

weixin_34111819的博客 171

java 爬虫 url管理器_python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以...

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点:1、爬虫调度入口(crawler_main.py)# coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outpute...

weixin_30996983的博客 289

当我们写爬虫的时候,我们实际在做什么?

当我开始学习爬虫的时候,我在网上也开始找相关教程,大多数都是xx分钟学会爬虫一类的文章。并不是否定这些文章的价值,因为他们的确“教会”我如何爬取网页。但我不想停留只会使用工具这一层面上,这就是我想谈谈自己对爬虫的理解。 思考一下我们是怎么样上网的呢? 打开浏览器,习惯性输入百度看看网络连接有没有问题或者输入谷歌看看能不能科学上网。 然后我现在的习惯是打开简书首页,看看有没有新的技...

xuzhougeng blog 329

手把手Java爬虫教学 - 1. 了解爬虫

一、什么是爬虫 先来看一下百度百科,了解一下爬虫~ 我们通过爬虫主要的目的就是爬取数据,好比 A 网站、B 网站有我们所需要的内容,但是这两个网站并没有给我们提供接口,那我们怎么能拿到上面的数据呢? 这时候我们就可以通过爬虫对相关页面进行爬取,将我们需要的数据爬取出来。 二、爬虫的作用 爬虫除去上面那种比较简单的采集数据之外,还有很多作用,来看一下: 1. 自动化测试(Selenium) 2. 漏洞扫描 当然,我用爬虫就是为了做数据采集。 三、爬虫分类 1. 通用网络爬虫 通用网络

胖子胖子大胖子的博客 1700
上一篇: Java实现希尔排序
下一篇: Java实现归并排序
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值