抓取百度关键词排名、标题、连接、描述

2023-05-16

抓取百度关键词排名、标题、连接、描述

转载请标明出处

最近在做百度关键词排名的功能,发现网上资源比较这里写代码片少,于是自己琢磨了一下,写一下笔记;
本文重点在于提供思路,请不要过分依赖,本文主要靠抓取页面标签来完成,如果百度官网将页面标签修改了,请自行修改,如果遇到问题或需要修改的地方请私信我。
鸣谢:本公司SEO提供思路

package cc.test.core;


import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.HasParentFilter;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.Div;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.util.NodeList;


public class KeywordRun {
    /**
     * 
     * @Description: 获取排名数
     * @param @param keyword-关键词
     * @param @param url-域名
     * @param @return   
     * @return int  
     */
    public int getKeywordRank(String keyword, String url) {
        int re = 0;
        // for (int i = 0; i < 100; i += 10) {
        // if (i == 0) {
        re = getThisRank("http://www.baidu.com/s?wd=" + keyword, url);
        //
        // if (re > 0)
        // break;
        // } else {
        // re = getThisRank("http://www.baidu.com/s?wd=" + keyword + "&pn=" + i,
        // url);
        // if (re > 0) {
        // re += i;
        // break;
        // }
        // }
        // }
        return re;
    }

    /**/
    public int getThisRank(String resource, String url) {
        int re = -1;
        int n = 1;
        try {
            Parser myParser = new Parser(resource);

            // 设置编码
            myParser.setEncoding("UTF-8");

            NodeFilter filter = new AndFilter(new TagNameFilter("DIV"), new HasParentFilter(new AndFilter(new TagNameFilter("DIV"), new HasAttributeFilter("id", "content_left"))));
            NodeList nodeList = myParser.extractAllNodesThatMatch(filter);

            for (int i = 0; i < nodeList.size(); i++) {

                Div table = (Div) nodeList.elementAt(i);

                Parser parser = new Parser(table.toHtml());

                NodeFilter TitleFilter = new NodeClassFilter(TitleTag.class);
                NodeFilter ElementIdFilter = new HasAttributeFilter("class", "c-showurl");// 获取链接
                OrFilter orFilter = new OrFilter(TitleFilter, ElementIdFilter); // 做一个逻辑OR
                                                                                // Filter组合
                NodeList list = parser.extractAllNodesThatMatch(orFilter);

                LinkTag linkTag = (LinkTag) list.elementAt(0);

                String link = HttpUtil.getBaiduFinalLink(linkTag.getLink());// 最终的连接
                System.out.println(link);

                parser = new Parser(table.toHtml());
                TitleFilter = new NodeClassFilter(TitleTag.class);
                ElementIdFilter = new HasAttributeFilter("class", "t");// 获取标题
                orFilter = new OrFilter(TitleFilter, ElementIdFilter); // 做一个逻辑OR
                                                                        // Filter组合
                list = parser.extractAllNodesThatMatch(orFilter);

                Tag tag = (Tag) list.elementAt(0);
                linkTag = (LinkTag) tag.getChildren().elementAt(0);

                //System.out.println(splitAndFilterString(linkTag.getChildrenHTML(),linkTag.getChildrenHTML().length()));

                parser = new Parser(table.toHtml());
                TitleFilter = new NodeClassFilter(TitleTag.class);
                ElementIdFilter = new HasAttributeFilter("class", "c-abstract");// 获取标题
                orFilter = new OrFilter(TitleFilter, ElementIdFilter); // 做一个逻辑OR
                // Filter组合
                list = parser.extractAllNodesThatMatch(orFilter);

                Div div = (Div) list.elementAt(0);
                String _abstract = splitAndFilterString(div.toHtml(),div.toHtml().length());//简介

                System.out.println(_abstract);


            }

            // System.out.println(text);
        } catch (Exception e) {
            e.printStackTrace();
            re = -1;
        }
        return re;
    }
/**
     * 
     * @Description: 调试
     * @param @param args   
     * @return void  
     * @throws
     */
    public static void main(String[] args) {

        KeywordRun run = new KeywordRun();

        Integer re = run.getKeywordRank("百度", "www.baidu.com");
    }
}

需要用到的外部方法

/**
     * 
     * 获取百度最终连接
     */
    public static String getBaiduFinalLink(String link){

        BufferedReader in = null;
        try {

            URL realUrl = new URL(link);
            // 打开和URL之间的连接
            HttpURLConnection connection = (HttpURLConnection)realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
            URL host = connection.getURL();
            if(connection.getResponseCode() >= 400){
                return null;
            }

            if (in != null) {
                in.close();
            }
            return host.getHost()+host.getPath();
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
            e.printStackTrace();
        }

        return null;
    }
    /**
     * 删除input字符串中的html格式
     * 
     * @param input
     * @param length
     * @return
     */
    public static String splitAndFilterString(String input, int length) {
        if (input == null || input.trim().equals("")) {
            return "";
        }
        // 去掉所有html元素,
        String str = input.replaceAll("\\&[a-zA-Z]{1,10};", "").replaceAll("<[^>]*>", "");
        str = str.replaceAll("[(/>)<]", "");
        int len = str.length();
        if (len <= length) {
            return str;
        } else {
            str = str.substring(0, length);
            str += "......";
        }
        return str;
    }

到此结束,
已经获取出百度第一页的所有的连接、标题、简介,如果百度页面有修改,请做相对应的修改即可。

转载请标明出处

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抓取百度关键词排名、标题、连接、描述 的相关文章

  • 【TCP专题】TCP连接建立

    今天开始 xff0c 我们整理一些关于TCP协议的知识 这块的内容写起来是非常费劲的 xff0c 因为本身TCP协议就不是一个简单的协议 xff0c 它能获得如今的地位 xff0c 和其复杂且出色的表现是分不开的 什么是面向连接 众所周知
  • cmake中添加引用动态链接和静态链接库

    动态库的添加 xff1a span class hljs keyword link directories span span class hljs envvar PROJECT SOURCE DIR span lib span class
  • ESP32的SDK开发之blufi一键配网

    ESP32 是集成 2 4 GHz Wi Fi 和蓝牙双模的单芯片方案 xff0c 采用台积电 TSMC 超低功耗的 40 纳米工艺 xff0c 拥有最 佳的功耗性能 射频性能 稳定性 通用性和可靠性 xff0c 适用于各种应用和不同功耗需
  • javascript作用域链的灵活运用1

    size 61 large javascript比较出彩的运用之一 xff1a 作用域链 1 对于有洁癖的前台人员来说 xff0c 全局变量就像长在美女脸上的黑斑 xff0c 真的无法容忍 2 javascript权威指南 说的那样 xff
  • ESP32的SDK开发之blufi一键配网微信小程序端开发

    上一篇文章简单介绍了blufi配网协议 xff0c 现在来讲讲再微信小程序端实现配网的控制 xff0c 小程序开发是基于官方原生API开发 本人的微信小程序开发也是初学的 xff0c 由于之前没接触过前端开发 xff0c 软件写的很渣渣 蓝
  • 自定义View之渐变色圆形进度条

    先展示下效果图 xff1a 然后按照自定义view的步骤来实现 我们需要将目标定义清楚 xff1a 目标是渐变色圆形进度条 xff0c 那么 xff0c 使用canvas画弧形是基础了 xff0c 另外是渐变色的效果 xff0c 这里使用L
  • NEMA协议解析 (GPS标准协议)

    概述 NMEA是National Marine Electronics Association 的缩写 xff0c 是美国国家海洋电子协会的简称 xff0c 现在是GPS导航设备统一的RTCM标准协议 协议集合 NMEA 0183协议定义的
  • 深入分析websocket协议,从3个方面设计网络应用层协议丨网络编程|网络IO|epoll|socket|网络协议丨c/c++linux服务器开发

    深入分析websocket协议 xff0c 从3个方面设计网络应用层协议 视频讲解如下 xff1a 深入分析websocket协议 xff0c 从3个方面设计网络应用层协议丨网络编程 网络IO epoll socket 网络协议丨c c 4
  • CMake找不到opencv库解决办法

    一 问题详情 在ubuntu中使用CMake编译链接opencv库的程序时FIND PACKAGE OpenCV REQUIRED 报错 xff0c 找不到opencv xff0c 信息如下 xff1a Found OpenCV Windo
  • 详解使用PHP CURL访问HTTPS

    三年前写过一篇 一个简陋的支持HTTPS的PHP CURL封装函数 xff0c 当时只是知其然不知其所以然 xff0c 今天来详细梳理一下 为方便说明 xff0c 先上代码吧 这是今天重新封装的一个函数 curl POST 64 param
  • adb启动Android系统设置命令

    adb打开系统设置的命令 adb命令打开手机设置页面 设置主页面 adb shell am start com android settings com android settings Settings 安全 adb shell am s
  • bootjar和fw配合动态jar

    Gradle 43 bootJar打包SpringBoot工程并分离jar包和配置文件 ruiurrui的博客 CSDN博客 bootjar Gradle 43 bootJar打包SpringBoot工程并分离jar包和配置文件 ruiur
  • 解决 Ubuntu 无法播放 MP4 格式视频的问题的办法

    解决 Ubuntu22 04 无法播放 MP4 格式视频的问题的办法 问题原因 xff1a 系统中的终端上安装缺少的编解码器 解决办法 xff1a 第一条命令将更新存储库 xff1a sudo apt get update 安装以下包含视频
  • 程序查询方式、程序中断、直接内存存取DMA

    程序查询方式 xff1a 当主机进行I O操作时 xff0c 首先发出询问信号 xff0c 读取设备的状态并根据设备状态决定下一步操作究竟是进行数据传输还是等待 这种控制下 xff0c CPU一旦启动I O xff0c 必须停止现行程序的运
  • app监听白天黑夜

    需要在AndroidManifest中的MainActivity配置 xff1a android configChanges 61 34 uiMode 34 64 param newConfig 64 Override public voi
  • 可缩放性ImageView(可以放大缩小)

    由于项目需求的原因 xff0c 最近一直在研究可缩放性ImageView xff0c 用本文来记录一下最近所学 xff1a 该ImageView的实现功能有 xff1a 1 xff09 初步打开时 xff0c 图片按比例满屏 xff08 填
  • 两行代码用camera2 打开闪光灯

    CameraManager c 61 CameraManager getSystemService Context CAMERA SERVICE c setTorchMode c getCameraList 0 true 打开闪光灯 c s
  • 混淆与加固

    https blog csdn net guolipeng network article details 74551968 上面是混淆 加固方面 腾讯乐固首选 xff0c 阿里加固没毛用 xff0c 360次选 原本大小阿里聚安全腾讯云应

随机推荐

  • C语言10进制转16进制

    void decimal to hexaDecimal int a char strs char hex int i 61 0 int j 61 0 int base 61 16 char tmp 16 while a gt 0 j 61
  • socket网络编程select使用方法

    文章以及源码均为原创 xff0c 当然欢迎转载 xff0c 转载请加说明 server h int select int nfds fd set readfds fd set writefds fd set exceptfds const
  • 海豚蓝牙ASIO软件设置方法

    1 为什么要使用海豚蓝牙音箱 xff0c 能带给我什么样的音乐体验 目前市面上的蓝牙音箱基本上是一个全频段的喇叭来播放CD音质的音乐 xff0c 如果是立体声的是不能通过一个喇叭来播放 xff0c 无法实现空间上的立体效果 xff0c 必须
  • pixhawk学习笔记-----mavlink

    mavlink协议 一帧数据的长度为8到263个字节 其具体的解析如下所示 xff1a 字节的索引 值 含义 0 0xFE V1 0 帧头 xff0c 表示一帧数据的开始 1 0 255 表示有效数据的长度 2 0 255 包序列 xff0
  • Ubuntu搭建本地web站点,并内网穿透实现公网访问

    本次教程我们通过搭建Apache服务 xff0c 部署一个简单的静态样例站点 xff0c 并使用cpolar内网穿透将内网样例站点发布到公网来进行演示 1 设置 Apache Web 服务器 1 1 安装Apache Web span cl
  • 为何某些公司不允许使用 C++ STL?

    最初开始禁用 C 43 43 STL xff0c 更多地是早期项目编码实践中留下的惯例 xff0c 被后来的程序员继承下来 老项目中这种选择尤其地多 不过如果有人将其上升到公司行为在不同项目中全面禁用 STL xff0c 则没有必要 xff
  • 手把手教你无线数传电台透明传输的配置全攻略

    透明传输 功能说明 任意电台发送数据 xff0c 具有相同地址且相同信道的电台均可同时接收数据 数据以透明方式发送和接收 xff0c 所发即所收 电台设置 1 需将 OPTION 特殊功能寄存器的第 7 位配置成 0 xff0c 透明传输模
  • unity寻路插件(A* Pathfinding)小结

    A Pathfinding 详细使用教程 基本功能 1 astarpath cs 核心组件 xff0c 相当于 路 xff0c 场景里应该只存在一个 2 Seeker cs 相当于一个代理 xff0c 寻找路径 xff0c 需要绑定在每一个
  • Socket网络通信C++编程总结

    概述 Socket编程有三种 xff0c 流式套接字 xff08 SOCK STREAM xff09 数据报套接字 SOCK DGRAM 原始套接字 SOCK RAW 前两者较常用 xff0c 这里简单总结前两种编程步骤以及一些参考资料 编
  • 【STM32+cubemx】0029 HAL库开发:HMC5883L磁力计的应用(电子指南针)

    今天我们来学习电子磁力计HMC5883L的使用 先介绍磁力计的基础知识 xff0c 再给一个获取磁力计数据的例子 xff0c 最后讲解HMC5883L磁力计的校准 xff0c 以及一些使用中的经验 1 xff09 HMC5883L磁力计的基
  • stm32F103R6之BKP(备份寄存器)

    目录 概述 侵入检测 RTC校准 概述 Stm32F103有42个16位的备份寄存器 他们处在备份域里 xff0c 当VDD电源被切断 xff0c 他们仍然由VBAT维持供电 当系统在待机模式下被唤醒 xff0c 或系统复位或电源复位时 x
  • Stm32F103R6之控制器局域网

    目录 概述 双CAN bxCAN工作模式 CAN协议特点 xff1a ISO11898标准CAN物理特性 CAN协议帧 概述 bxCAN是基本扩展CAN Basic Extended CAN 的缩写 xff0c 它支持CAN协议2 0A和2
  • 如何输出一个数的二进制数

    实现思想 xff1a 二进制数是以bit为操作数 xff0c 所以要想将一个数转换为二进制数 xff0c 我们需要先要将输入的数字转化为二进制数 xff0c 然后从高位到低位判断每一位是 1 还是 0 xff0c 最后把对应的 1 和 0
  • 使用libcurl库编写HTTP客户端(包括GET/POST/HTTPS)

    最近在写一个应用程序 需要与HTTP服务器进行数据交互 于是乎自己写了一个类似wget的功能的客户端 实现很简单 但是功能不给力 只可基本功能 于是又在网上找了找 发现使用libcurl库很方便 很强大 比起wget之类的 强大不是一点点
  • 修改系统默认shell为bash

    xfeff xfeff 从 ubuntu 6 10 开始 xff0c ubuntu 就将先前默认的bash shell 更换成了dash shell xff1b 其表现为 bin sh 链接倒了 bin dash而不是传统的 bin bas
  • 如何解决Reporting Services目录数据库文件存在的问题

    出处 xff1a http blog sina com cn s blog 6bace3cc0101jlxv html 错误提示 xff1a 自检时提示 Reporting Services目录数据库文件存在 失败 xff0c Report
  • 无线射频专题《射频合规,2.4GHz WIFI测试指标详解》

    目录 引言 Transmitter Power 发送功率 Transmit Spectrum Mask 发送信号频谱模版 Frequency Error 频率误差 EVM 矢量误差幅度 Band Edges and harmonics 频带
  • 获取当前访问的路径

    String returl 61 request getRequestURL 43 request getQueryString 61 61 null 34 34 34 34 43 request getQueryString
  • 抓取百度关键词排名

    最近在做百度关键词排名的功能 xff0c 发现网上资源比较少 xff0c 于是自己琢磨了一下 xff0c 写一下笔记 xff1b 本文重点在于提供思路 xff0c 请不要过分依赖 xff0c 本文主要靠抓取页面标签来完成 xff0c 如果百
  • 抓取百度关键词排名、标题、连接、描述

    抓取百度关键词排名 标题 连接 描述 转载请标明出处 最近在做百度关键词排名的功能 xff0c 发现网上资源比较这里写代码片少 xff0c 于是自己琢磨了一下 xff0c 写一下笔记 xff1b 本文重点在于提供思路 xff0c 请不要过分