java利用url实现网页内容的抓取

发布时间 - 2026-01-11 00:08:17    点击率:

闲来无事,刚学会把git部署到远程服务器,没事做,所以简单做了一个抓取网页信息的小工具,里面的一些数值如果设成参数的话可能扩展性能会更好!希望这是一个好的开始把,也让我对字符串的读取掌握的更加熟练了,值得注意的是JAVA1.8 里面在使用String拼接字符串的时候,会自动把你要拼接的字符串用StringBulider来处理,大大优化了String 的性能,闲话不多说,show my XXX code~

运行效果:

首先打开百度百科,搜索词条,比如“演员”,再按F12查看源码

然后抓取你想要的标签,注入LinkedHashMap里面就ok了,很简单是吧!看看代码罗

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
/**
 * Created by chunmiao on 17-3-10.
 */
public class ReadBaiduSearch {
 //储存返回结果
 private LinkedHashMap<String,String> mapOfBaike;
 //获取搜索信息
 public LinkedHashMap<String,String> getInfomationOfBaike(String infomationWords) throws IOException {
  mapOfBaike = getResult(infomationWords);
  return mapOfBaike;
 }
 //通过网络链接获取信息
 private static LinkedHashMap<String, String> getResult(String keywords) throws IOException {
  //搜索的url
  String keyUrl = "http://baike.baidu.com/search?word=" + keywords;
  //搜索词条的节点
  String startNode = "<dl class=\"search-list\">";
  //词条的链接关键字
  String keyOfHref = "href=\"";
  //词条的标题关键字
  String keyOfTitle = "target=\"_blank\">";
  String endNode = "</dl>";
  boolean isNode = false;
  String title;
  String href;
  String rLine;
  LinkedHashMap<String,String> keyMap = new LinkedHashMap<String,String>();
  //开始网络请求
  URL url = new URL(keyUrl);
  HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
  InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");
  BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
  //读取网页内容
  while ((rLine = bufferedReader.readLine()) != null){
   //判断目标节点是否出现
   if(rLine.contains(startNode)){
    isNode = true;
   }
   //若目标节点出现,则开始抓取数据
   if (isNode){
    //若目标结束节点出现,则结束读取,节省读取时间
    if (rLine.contains(endNode)) {
     //关闭读取流
     bufferedReader.close();
     inputStreamReader.close();
     break;
    }
    //若值为空则不读取
    if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){
     keyMap.put(title,href);
    }
   }
  }
  return keyMap;
 }
 //获取词条对应的url
 private static String getHref(String rLine,String keyOfHref){
  String baikeUrl = "http://baike.baidu.com";
  String result = "";
  if(rLine.contains(keyOfHref)){
   //获取url
   for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){
    result += rLine.charAt(j);
   }
   //获取的url中可能不含baikeUrl,如果没有则在头部添加一个
   if(!result.contains(baikeUrl)){
    result = baikeUrl + result;
   }
  }
  return result;
 }
 //获取词条对应的名称
 private static String getName(String rLine,String keyOfTitle){
  String result = "";
  //获取标题内容
  if(rLine.contains(keyOfTitle)){
   result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());
   //将标题中的内容含有的标签去掉
   result = result.replaceAll("<em>|</em>|</a>|<a>","");
  }
  return result;
 }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# java实现网页数据抓取  # java实现网页内容抓取  # url抓取工具  # JavaWeb项目打开网页出现Session Error的异常解决方案  # java通过Jsoup爬取网页过程详解  # 详解java实现简单扫码登录功能(模仿微信网页版扫码)  # java调用微信接口实现网页分享小功能  # Java实现微信网页授权的示例代码  # Java实现的简单网页截屏功能示例  # 详解JAVA抓取网页的图片  # JAVA利用正则表达式抓取网站图片  # Java导出网页表格Excel过程详解  # 的是  # 无事  # 你要  # 我对  # 这是一个  # 很简单  # 如果没有  # 不含  # 会把  # 多说  # 也让  # 则在  # 你想要  # 值为  # 再按  # 小工具  # 闲来  # HttpURLConnection  # infomationWords  # getInfomationOfBaike 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  iOS UIView常见属性方法小结  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Windows Hello人脸识别突然无法使用  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  nodejs redis 发布订阅机制封装实现方法及实例代码  在线教育网站制作平台,山西立德教育官网?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel如何配置和使用缓存?(Redis代码示例)  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  如何快速查询网址的建站时间与历史轨迹?  EditPlus中的正则表达式 实战(2)  音响网站制作视频教程,隆霸音响官方网站?  Java类加载基本过程详细介绍  Laravel如何自定义错误页面(404, 500)?(代码示例)  JS弹性运动实现方法分析  微信小程序 HTTPS报错整理常见问题及解决方案  浅析上传头像示例及其注意事项  如何在Ubuntu系统下快速搭建WordPress个人网站?  Python面向对象测试方法_mock解析【教程】  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Python正则表达式进阶教程_复杂匹配与分组替换解析  EditPlus中的正则表达式 实战(4)  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  什么是javascript作用域_全局和局部作用域有什么区别?  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  如何在万网自助建站中设置域名及备案?  北京网站制作公司哪家好一点,北京租房网站有哪些?  长沙做网站要多少钱,长沙国安网络怎么样?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  nginx修改上传文件大小限制的方法  如何自定义建站之星网站的导航菜单样式?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  微信小程序 input输入框控件详解及实例(多种示例)  如何选择PHP开源工具快速搭建网站?  android nfc常用标签读取总结  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  php 三元运算符实例详细介绍