利用String类制作简单的网络爬虫

2023-05-16

网络爬虫

       网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。




使用String类提供的方法制作简单的网络爬虫


实现步骤:

     1、分析网页找到内容页面链接
     2、通过Java程序获取网页源码
     3、利用String类提供的方法对网页源码进行字符串处理


String类的用法:http://blog.csdn.net/gfd54gd5f46/article/details/54704182


分析网页

  • 这里就找一个ip查询的页面进行测试

打开网址:http://www.ip138.com/


  • 会返回一个IP地址及运营商

1


使用谷歌浏览器分析一下这个网页

F12 开启调试窗口



  • 进入Network

2


刷新网络之后截取到网页数据

3


然后开始分析网页返回的内容

  • 点击http://www.ip138.com/ 之后发现里面的内容很多,并没有找到我们需要的IP

4


查看ic.asp页面 ,找到了需要的内容页面

5


拷贝网页的链接和页面编码

url: http://1212.ip138.com/ic.asp
编码:GB2312

6

7



1、获取页面源码


打开Eclipse创建一个Java工程

    /**
     * 通过网络链接获取HTML源码
     * @param pageUrl 
     * @param encoding
     * @return content
     */
    public static String getHtmlFromUrl(String pageUrl,String encoding){
        //用来存放HTML源码
        String content = "";
        try {
            //初始化
            URL url = new URL(pageUrl);
            //通过url打开一个连接
            URLConnection conn =  url.openConnection();
            //设置请求属性,伪装成用户,否则会被检查出来是爬虫
            conn.setRequestProperty("User-Agent", 
            "Mozilla/31.0 (compatible; MSIE 10.0; Windows NT; DigExt)");

            //拿到一个输入流
            InputStream is =  conn.getInputStream();
            //初始化一个扫描仪,将输入流跟编码传递进去
            Scanner scanner = new Scanner(is,encoding);
            //遍历扫描仪
            while(scanner.hasNextLine()){
                //得到一行数据
                String str = scanner.nextLine();
                //将每一行的数据给到content
                content += str + "\n";
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //将内容返回
        return content; 
    }

8


这样就拿到了网页的源码了。



2、截取IP地址


有了网页的源码之后,我们就可以使用String类相应的方法对源码内容进行截取,首先分析一下源码的内容

9


我们需要获取的ip地址是在 中括号[] 里面的:67.198.247.221




这时候需要用到String类里面的方法:

int indexOf(int ch) //返回指定字符在此字符串中第一次出现处的索引。

String substring(int beginIndex, int endIndex) //返回一个新字符串,它是此字符串的一个子字符串。

  • String getIpFromContent(String content)
    /**
     * 通过源码内容获取IP地址
     * @param content
     * @return ip
     */
    public static String getIpFromContent(String content){

        //找到以'[' 开始 出现的位置
        int beginIndex = content.indexOf("[");

        //找到以']' 结束  出现的位置
        int endIndex = content.indexOf("]");

        //截取从'['   到 ']'  里面的内容
        //因为substring()方法 是  [beginIndex,endIndex)  
        //第一个参数是开区间,第二个参数是闭区间,所以第一个参数beginIndex 需要加1
        String ip = content.substring(beginIndex + 1, endIndex);

        //返回截取的IP地址
        return ip;


    }


这样就获取到了IP地址

10



3、截取运营商名称


借鉴前面获取IP地址的步骤

  • 我们要截取 ‘美国’ 这个字段

11


  • String getOperatorFromContent(String content)
    /**
     * 从源码内容中获取运营商
     * @param content
     * @return operator
     */
    public static String getOperatorFromContent(String content){
        //找到以  '来' 开始   出现的位置
        int beginIndex = content.indexOf("来自:");
        //找到以  '</center>' 结束  出现的位置
        int endIndex = content.indexOf("</center>");

        //截取'来' 到 '</center>' 中间的内容
        //因为我们只需要截取运营商的名字,所以beginIndex需要加3
        String operator = content.substring(beginIndex + 3, endIndex);
        //返回运营商名称
        return operator;
    }

12


到这里我们的简单爬虫就实现了。


拿到页面的源码之后就可以使用String类里的方法进行字符串处理了。


完整源码

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;

/**
 * 2017-1-25
 * @author LingDu
 * 功能:简单的网络爬虫,获取IP地址以及运营商名称
 */
public class StringDemo {

    /**
     * 通过网络链接获取HTML源码
     * @param pageUrl 
     * @param encoding
     * @return content
     */
    public static String getHtmlFromUrl(String pageUrl,String encoding){
        //用来存放HTML源码
        String content = "";
        try {
            //初始化
            URL url = new URL(pageUrl);
            //通过url打开一个连接
            URLConnection conn =  url.openConnection();
            //设置请求属性,伪装成用户,否则会被检查出来是爬虫
            conn.setRequestProperty("User-Agent", 
            "Mozilla/31.0 (compatible; MSIE 10.0; Windows NT; DigExt)");

            //拿到一个输入流
            InputStream is =  conn.getInputStream();
            //初始化一个扫描仪,将输入流跟编码传递进去
            Scanner scanner = new Scanner(is,encoding);
            //遍历扫描仪
            while(scanner.hasNextLine()){
                //得到一行数据
                String str = scanner.nextLine();
                //将每一行的数据给到content
                content += str + "\n";
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //将内容返回
        return content; 
    }

    /**
     * 通过源码内容获取IP地址
     * @param content
     * @return ip
     */
    public static String getIpFromContent(String content){

        //找到以'[' 开始 出现的位置
        int beginIndex = content.indexOf("[");

        //找到以']' 结束  出现的位置
        int endIndex = content.indexOf("]");

        //截取从'['   到 ']'  里面的内容
        //因为substring()方法 是  [beginIndex,endIndex)  
        //第一个参数是开区间,第二个参数是闭区间,所有beginIndex + 1
        String ip = content.substring(beginIndex + 1, endIndex);

        //返回截取的IP地址
        return ip;


    }

    /**
     * 从源码内容中获取运营商
     * @param content
     * @return operator
     */
    public static String getOperatorFromContent(String content){
        //找到以  '来' 开始   出现的位置
        int beginIndex = content.indexOf("来自:");
        //找到以  '</center>' 结束  出现的位置
        int endIndex = content.indexOf("</center>");

        //截取'来' 到 '</center>' 中间的内容
        //因为我们只需要截取运营商的名字,所以beginIndex需要加3
        String operator = content.substring(beginIndex + 3, endIndex);
        //返回运营商名称
        return operator;
    }

    public static void main(String[] args) {
        String content = getHtmlFromUrl("http://1212.ip138.com/ic.asp", "GB2312");
        System.out.println(getIpFromContent(content));
        System.out.println(getOperatorFromContent(content));        
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用String类制作简单的网络爬虫 的相关文章

  • 1-4 实验3 串口通信

    串口通信 1 实验内容 xff1a PC端串口调试助手向板子发送数据 xff0c 板子接受到数据后 xff0c 再把数据发送回给PC端串口调试助手 2 串口发送接受数据的基本步骤 xff1a 初始化串口 xff08 设置波特率 中断等 xf
  • 1-6 实验5 无线温度检测实验

    无线温度检测实验 1 实验内容 xff1a 协调器建立ZigBee无线网络 xff0c 终端节点自动加入网络 xff0c 然后终端节点周期性地采集温度并将数据发送到协调器 协调器接受数据并通过串口把接受到的数据传给PC端的串口调试助手 2
  • 1-11 实验9 网络管理实验1 获取自身的和父节点网络地址、MAC地址

    p p p style color rgb 51 51 51 font family Arial font size 14px line height 26px 获取自身的和父节点网络地址 MAC地址 p p style color rgb
  • 1-14 实验11 获取网络拓扑

    获取网络拓扑 1 实验内容 xff1a PC端串口调试助手向协调器发送命名 topology 协调器接受到命令后 xff0c 将网络拓扑信息发送到PC机串口调试助手上 2 知识点 xff1a 在1 11 实验9 网络管理实验1 获取自身和父
  • S 串口编程 详解3 串口的初始化、打开/关闭

    串口编程 详解3 串口的初始化 程序打开串口 xff0c 采用两种方法 xff1a 1 程序启动 xff0c 调用OnInitDialog 函数 xff0c 打开串口 xff0c 缺省串口号为COM1 xff0c 如果COM1不存在或被占用
  • 求关键路径(包含邻接表的建立、拓扑排序)

    include lt stdio h gt include lt stdlib h gt typedef struct node int adjvex 邻接点域 int info 边上的信息 struct node next 指向下一个邻接
  • FPGA串口回环实验

    本文将从个人理解的角度 xff0c 解释FPGA串口通信的原理 xff0c 并进行实战演示 1 写在前面的话 串口通信是初学FPGA必过的一道坎 xff0c 如果能够在不参考任何资料的情况下自己手搓一套串口回环的代码 xff0c Verio
  • Debug Assertion Failed!解决方法详解

    1 野指针 2 内存泄露 解决方法 1 看一看你的程序里是不是有 ASSERT xff08 xff09 或 VERIFY xff08 xff09 语句 这两个宏是用来测试它的参数是否为真的 出现你说的 xff0c 这说明你的指针或表达试有问
  • 用tftp的方式在u_boot下 烧写uImage内核

    用 u boot 进行下载 uImage 一种 kernel 镜像文件 首先 把编译好的 uImage 文件放在 tftpboot 目录下 用网线把开发板和电脑连上 但PC上的网卡显示是没连接的 xff0c 这一点是没有关系的 xff0c
  • 利用NFS服务挂载NFS根文件系统

    嵌入式Linux根文件系统 xff0c 简单地说 xff0c 根文件系统就是一种目录结构 注意根文件系统和普通的文件系统的区别 常见的Linux根文件系统有 xff1a xff08 1 xff09 NFS xff08 网络根文件系统 xff
  • 数据校验之Checksum算法

    校验和 xff08 Checksum xff09 是网络协议使用的数据错误检测方法 xff0c 并且被认为比LRC xff08 纵向冗余校验 xff0c Longitudinal Redundancy Check xff0c LRC xff
  • 位序转字符串的一种高效方法

    include lt stdio h gt include lt stdlib h gt include lt malloc h gt include lt string h gt include lt arpa inet h gt def
  • OpenSIPS实战(一):OpenSIPS使用简介

    1 OpenSIPS是什么 OpenSIPS xff08 Open SIP Server xff09 是一个成熟的开源SIP服务器实现 可以作为SIP代理 路由器 但OpenSIPS不仅仅是一个SIP代理 路由器 xff0c 因为它包含了应
  • Floyd判圈算法(龟兔赛跑算法, Floyd's cycle detection)及其证明

    问题 xff1a 如何检测一个链表是否有环 xff08 循环节 xff09 xff0c 如果有 xff0c 那么如何确定环的起点以及环的长度 空间要求 xff1a 不能存储所经过的的每一个点 举例 xff1a x 0 61 1 x 0 61
  • Ubuntu配置GPU版本pytorch环境(含NVIDIA驱动+Cuda+Cudnn)

    本文更新于2018年8月底 概述 步骤如下 xff1a 1 安装Ubuntu 2 安装NVIDIA 显卡驱动 2 安装NVIDIA Cuda 3 安装NVIDIA CuDNN 4 安装GPU版本的PyTorch 安装Ubuntu 系统版本选
  • PyTorch中的Dataset、Dataloader和_DataloaderIter

    Dataset Pytorch中数据集被抽象为一个抽象类torch utils data Dataset xff0c 所有的数据集都应该继承这个类 xff0c 并override以下两项 xff1a len xff1a 代表样本数量 len
  • 彻底搞懂Lab 颜色空间

    本文参考wikipedia xff0c 并加入了自己的理解 xff0c 有不对的地方多多指教 名称 在开始之前 xff0c 先明确一下Lab颜色空间 xff08 Lab color space xff09 的名字 xff1a Lab的全称是
  • MiniFly微型四轴学习与开发日志(五)——遥控器任务详解

    文章目录 radiolinkTask无线连接任务usblinkTxTask usb发送任务usblinkRxTask usb接收任务commanderTask飞控指令发送任务keyTask按键扫描任务displayTask显示任务confi
  • .与::的使用区别

    今天尝试编写了一个小的Windows应用程序 xff0c 在编写的过程中用到MessageBox函数 但是一直不正确 我当时尝试MessageBox 34 NULL 34 34 Alert 34 34 ERROR 34 MB OK xff0
  • Pytorch中的contiguous理解

    最近遇到这个函数 xff0c 但查的中文博客里的解释貌似不是很到位 xff0c 这里翻译一下stackoverflow上的回答并加上自己的理解 在pytorch中 xff0c 只有很少几个操作是不改变tensor的内容本身 xff0c 而只

随机推荐

  • 一文读懂GAN, pix2pix, CycleGAN和pix2pixHD

    本文翻译 总结自朱俊彦的线上报告 xff0c 主要讲了如何用机器学习生成图片 来源 xff1a Games2018 Webinar 64期 xff1a Siggraph 2018优秀博士论文报告 人员信息 主讲嘉宾 姓名 xff1a 朱俊彦
  • Pytorch中的optimizer

    与优化函数相关的部分在torch optim模块中 xff0c 其中包含了大部分现在已有的流行的优化方法 如何使用Optimizer 要想使用optimizer xff0c 需要创建一个optimizer 对象 xff0c 这个对象会保存当
  • 图像质量评价之结构相似性SSIM(上)

    本文总结归纳自论文 image quality assessment from error visibility to structural similarity 概述 这篇文章主要介绍对图像质量进行打分评价的一个很经典的指数 结构相似性
  • 图像质量评价之结构相似性SSIM(中)

    在上一篇文章中 xff0c 我们介绍了对图像质量进行评价的必要性 主观评价和客观评价的两种标准 xff0c 以及设计符合人类直觉的评价标准的困难性和重要性 本来这篇文章想把我们的主角SSIM讲完 xff0c 但是发现前面需要写的铺垫有点长h
  • CS231n lecture 9:各大经典网络 AlexNet/VGG/GoogleNet/ResNet(上)

    本文翻译总结自CS231n Lecture 9 本篇将深入介绍当前的应用和研究工作中最火的几个CNN网络架构 AlexNet VGGNet GoogleNet和ResNet xff0c 它们都在ImageNet分类任务中有很好的表现 另外
  • STM32c8t6干扰GPS信号的解决方式

    项目目的 xff1a stm32解析GPS报文 xff0c 显示在oled上 项目遇到的问题 xff1a GPS模块接收信号不良 问题表现 xff1a 1 GPS可以搜星 xff0c 户外大约20颗 xff0c 但是锁定不了卫星 2 GPS
  • Rplidar A2 激光雷达使用hector_slam进行建图

    手头上有一个Rplidar A2 激光雷达 xff0c 通过其进行slam建图 xff0c 如下 环境 xff1a 1 Rplidar A2 激光雷达 xff1b 2 笔记本电脑 xff1b 3 Ubuntu 16 04 4 ROS Kin
  • Oracle之常用内置函数

    1 Oracle内置函数 wm concat wm concat 函数是oracle中独有的 mysql中有一个group concat 函数 实现行转列功能 xff0c 即将查询出的某一列值使用逗号进行隔开拼接 xff0c 成为一条数据
  • RRT算法三维避障的MATLAB实现

    RRT算法又称为快速随机扩展数算法 xff0c 是一种普适路径规划算法 xff0c 为什么说是普适算法 xff0c 因为它什么样的苛刻的条件都会极大的可能性找到一条路径 但是这样的算法也往往会伴随缺点 xff1a 1 每次迭代都是在随机找点
  • MiniFly微型四轴学习与开发日志(六)——遥控器任务与系统框架

    文章目录 遥控器任务框架遥控器系统框架 遥控器任务框架 参数配置任务主要功能是保存参数 按键扫描任务主要功能是扫描按键 显示任务主要功能是显示界面 飞控指令发送任务主要功能是将采集摇杆电位器的 AD 值转换为姿态控制命令 xff0c 并以
  • Arduino串口发送与接收16进制数据(HEX)(数据乱码)-JDY-10M组网

    最近使用JDY 10M蓝牙组网 xff0c 需要Arduino收发数据 xff0c 将遇到的一些问题与最终解决方法分享给大家 xff0c 如果内容有问题 xff0c 还请大家指点 1 JDY 10M组网 关于如何JDY 10M如何组网网上介
  • 串口通信协议介绍

    串口通信协议介绍 空闲时 xff1a TX RX为高电平 xff0c 通讯时 xff1a 低电平为起始位 43 送数据位 xff08 从低到高 xff09 43 校验位 43 停止位 常用8N1 0 1 0 1 0 0 0 0 0 0 TX
  • ROS-基础(kinetic---melodic---noetic)

    学习资料参考 xff1a ROS机器人开发实践 胡春旭 目录 工作空间和功能包的创建集成开发环境的搭建话题和服务的实现方法ROS中的命名空间及解析方法ROS分布式通信的方法 热身 常用命令 命令作用catkin create pkg创建功能
  • linux下用多线程实现socket服务器和客户端的异步通信

    前面介绍了用select函数来实现socket的异步收发数据 xff0c 但是select函数也有一些缺陷 xff0c 要使socket能持续地通信 xff0c select必须不停地检测 xff0c 这样进程就会一直阻塞在这里 xff0c
  • SDN之NETCONF Call Home

    本文主要内容都来自于今年二月发布的RFC8071 NETCONF Call Home and RESTCONF Call Home xff0c 该RFC从2015年4月提出到最终发布一共修改了17个版本 xff0c 其间修改内容可以点击查看
  • Command ‘roscore‘ not found, but can be installed with: sudo apt install python-roslaunch

    Command roscore not found but can be installed with sudo apt install python roslaunch roscore 报错 Command 39 roscore 39 n
  • 按键精灵通过抓抓工具来获取坐标位置

    1 按键精灵通过抓抓工具找图 这里我就随便拿一款游戏来测试了 这是一款手游打开之后的界面 xff0c 要求我们点击确定继续现在要求使用脚本在帮我们点击这个确定按钮 我们新建一个脚本 然后打开按键精灵的抓抓工具 然后返回到按键精灵 xff0c
  • 在云服务器上部署项目(上)

    1 购买腾讯云主机 首先我们先了解一下云服务器的概念 云服务器 xff1a 高性能高稳定的云虚拟机 xff0c 可在云中提供弹性可调节的计算容量 xff0c 不让计算能束缚您的想象 xff1b 您可以轻松购买自定义配置的机型 xff0c 在
  • 在云服务器上部署项目(下)

    云服务器上部署项目 xff08 上 xff09 xff1a http blog csdn net gfd54gd5f46 article details 54331207 5 从网上下载jpress开源项目 流程 xff1a 下载jpres
  • 利用String类制作简单的网络爬虫

    网络爬虫 网络爬虫 xff08 又被称为网页蜘蛛 xff0c 网络机器人 xff0c 在FOAF社区中间 xff0c 更经常的称为网页追逐者 xff09 xff0c 是一种按照一定的规则 xff0c 自动地抓取万维网信息的程序或者脚本 另外