需求:本地一批关键词,需要查询百度指数,5118一次只能查100条,5W不得手软,看接口0.013元1条,网上找了百度指数接口,都不怎么便宜,那就自己动手了,用webmagic也是很方便快捷的。
1、配置
webmagic两个包、打包成jar可以挂在服务器慢慢运行。

    <dependencies><!-- webmagic核心包 --><dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.4</version></dependency><!-- webmagic扩展包 --><dependency><groupId>us.codecraft</groupId><artifactId>webmagic-extension</artifactId><version>0.7.4</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>2.5.5</version><configuration><archive><manifest><mainClass>com.booy.task.OrderProcessor</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration></plugin></plugins></build>

log4j日志文件:

log4j.rootLogger=INFO,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

2、主类

public class BaiduZhishu implements PageProcessor {@Overridepublic void process(Page page) {Document doc = page.getHtml().getDocument();String docStr = doc.toString();Pattern statusP = Pattern.compile("status\\\":\\d*?(?=,)");Matcher statusM = statusP.matcher(docStr);statusM.find();String statusGroup = statusM.group();int i = Integer.parseInt(statusGroup.substring(8, statusGroup.length()));String allZhishu = null;//综合指数String pcZhishu = null;//pc指数String wiseZhishu = null;//移动指数int statusCode = -1;//正常请求有指数if (i == 0) {//综合指数Pattern allP = Pattern.compile("all\\\":\\{\\\"avg\\\":\\d*?(?=,)");Matcher allM = allP.matcher(docStr);if (allM.find()) {String ZhishuSuf = allM.group();allZhishu = ZhishuSuf.substring(12, ZhishuSuf.length());}//pc指数Pattern pcP = Pattern.compile("pc\\\":\\{\\\"avg\\\":\\d*?(?=,)");Matcher pcM = pcP.matcher(docStr);if (pcM.find()) {String ZhishuSuf = pcM.group();pcZhishu = ZhishuSuf.substring(11, ZhishuSuf.length());}//移动指数Pattern wiseP = Pattern.compile("wise\\\":\\{\\\"avg\\\":\\d*?(?=,)");Matcher wiseM = wiseP.matcher(docStr);if (wiseM.find()) {String ZhishuSuf = wiseM.group();wiseZhishu = ZhishuSuf.substring(13, ZhishuSuf.length());}statusCode = 0;//没有指数} else if (i == 10002) {statusCode = 10002;} else if (i == 10000) {System.out.println("账号没有登录!");page.setSkip(true);} else {page.setSkip(true);System.out.println("出现了其他错误");}String url = page.getUrl().toString();String keywords = url.substring(76, url.length() - 33);StringBuffer sbf = new StringBuffer();sbf.append(keywords).append("#").append(statusCode).append("#").append(allZhishu).append("#").append(pcZhishu).append("#").append(wiseZhishu);String dataZhishu = sbf.toString();page.putField("data", dataZhishu);}private Site site = Site.me().setCharset("utf8") //编码.setTimeOut(1000)  //超时时间 ms毫秒.setCycleRetryTimes(10)//设置循环重试次数.setSleepTime(300) //每次请求间隔时间.setUserAgent(randomUserAgent())//随机UserAgent.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9").addHeader("Cookie", baiduCookie);@Overridepublic Site getSite() {return site;}public static void main(String[] args) {//系统开始运行时间long start = System.currentTimeMillis();DateFormat df = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");//开始时间startTime(start, df);List<String> keywords = TxtKeywords.getKeywords("D:\\data\\keywords.txt");int size = keywords.size();int i = 0;for (i = 0; i < keywords.size(); i++) {String keyword = keywords.get(i);String zhishuapi = "https://zhishu.baidu.com/api/SearchApi/index?area=0&word=[[%7B%22name%22:%22" + keyword + "%22,%22wordType%22:1%7D]]&days=90";Spider.create(new BaiduZhishu()).addUrl(zhishuapi).addPipeline(new TxtPipeline()).thread(3).run();//10次提示,100次提示,每500次提示if ((i + 1) % 500 == 0 || (i + 1) == 100 || (i + 1) == 10) {runTime(start, size, i, df);}}//结束时间endTime(start, df);}
}

UA和账号cookie

public class ParamsSite {//随机获取UserAgentprivate static List<String> UserAgents = new ArrayList<>();public static String randomUserAgent() {Random r = new Random();int nextInt = r.nextInt(UserAgents.size());return UserAgents.get(nextInt);}static {UserAgents.add("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");UserAgents.add("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36");}public static String baiduCookie = "";
}

查询结果输出到txt文本

public class TxtPipeline implements Pipeline {@Overridepublic void process(ResultItems resultItems, Task task) {String data = resultItems.get("data");StringBuffer sbf = new StringBuffer();sbf.append(data).append("\r\n");String dataZhishu = sbf.toString();//写入文件File file = new File("D:\\data\\baiduzhishu.txt");try {if (!file.exists()) {file.createNewFile();}OutputStream out = new FileOutputStream(file, true);BufferedOutputStream bos = new BufferedOutputStream(out);bos.write(dataZhishu.getBytes());bos.close();} catch (IOException e) {e.printStackTrace();}}}

运行时间统计

package com.booy.utils;import java.text.DateFormat;public class RunTime {//时间统计提示public static void runTime(long start, int keywordsLen, int i, DateFormat df) {long end = System.currentTimeMillis();long time = (end - start);//String endDate = df.format(end);//单个信息所需平均时间long timeAVG = time / i;//剩余查询数量int unfinishNum = keywordsLen - (i + 1);//剩余查询数量所需时间long estimatedTime = timeAVG * unfinishNum / 1000;//已经查询时间统计long s = time / 1000 % 60;long m = (time / 1000 / 60) % 60;long h = time / 1000 / (60 * 60);//预估时间统计long ess = estimatedTime % 60;long esm = (estimatedTime / 60) % 60;long esh = estimatedTime / (60 * 60);System.out.println("==============================================");System.out.println("查询成功" + (i + 1) + "条数据," + "所需时间:" + h + "h:" + m + "m:" + s + "S");System.out.println("时间:" + endDate);//预估耗时System.out.println("还剩余" + unfinishNum + "个关键词待查询,预计还需:" + esh + "h:" + esm + "m:" + ess + "S完成");System.out.println("程序正在查询中...");}//结束时间public static void endTime(long start, DateFormat df) {long end = System.currentTimeMillis();long time = (end - start) / 1000;//String endDate = df.format(end);long s = time % 60;long m = (time / 60) % 60;long h = time / (60 * 60);System.out.println("==============================================");System.out.println("程序运行结束!" + "总共运行时间:" + h + "h:" + m + "m:" + s + "S");System.out.println("时间:" + endDate);}//开始时间public static void startTime(long start, DateFormat df) {String startDate = df.format(start);System.out.println("系统开始运行:数据查询中...");System.out.println("运行时间:" + startDate);}
}

txt文件读取关键词

public class TxtKeywords {public static List<String> getKeywords(String filepath){try{String temp = null;File f = new File(filepath);
//指定读取编码用于读取中文InputStreamReader read = new InputStreamReader(new FileInputStream(f),"GBK");List<String> readList = new ArrayList<>();BufferedReader reader=new BufferedReader(read);while((temp=reader.readLine())!=null &&!"".equals(temp)){readList.add(temp);}reader.close();return readList;}catch (Exception e) {System.out.println("文件路径错误或者文件不存在");e.printStackTrace();return null;}}
}

webmagic百度指数查询相关推荐

  1. php百度指数查询,根据社会保险法律制度规定,经劳动能力鉴定委员会鉴定,评定伤残等级的工伤职工,享受的伤残待遇包括( )。...

    [单选题]给定条件下,反应2NO + 2H 2 = N 2 + 2H 2 O 分两步进行, I. 2NO + H 2 = N 2 + H 2 O 2 (慢) II. H 2 O 2 + H 2 = 2 ...

  2. php百度指数查询,赢网关键词指数工具:百度指数批量查询!

    15 123 2013-1-8 17:16:30 一打开就出错 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ********** ...

  3. 择云关键词查询工具2023 v3.0 正式发布了 (支持批量查询百度指数)

    这是一款能够批量挖掘大量关键词的工具,实时挖掘速度业界第一!!! 软件介绍: 择云关键词查询工具2023 V3.0是针对站长,企业营销人员,及SEO人士的一款的关键词快速挖掘工具,能够帮助用户快速查询 ...

  4. 推荐百度和谷歌在线指数查询工具

    推荐几个我做优化经常使用的在线查询工具 百度指数查询:http://index.baidu.com/ 说明:查询关键词指数 百度搜索风云榜:http://top.baidu.com/ 说明:查询热门关 ...

  5. 【SEO工具】批量查询百度指数(Python编写)

    我们在做SEO的时候,经常性的在网站搭建的时候,首先去定位网站的关键词,而定位关键词的时候,我们经常会使用百度指数作为关键词是否是重要的,算是一个衡量关键词的一个标准了.当然这个是一般性的网站建设,比 ...

  6. 百度指数-批量查询器。收费!!!?还是自己来吧。

    园子里的高手们,在园里潜水2年多了,今天出来透透气.这也是第二篇往首页推的东西,发个自制小工具帖,高手们就见笑了~~ 昨天,老大让我采集一些数据.然后,在那些数据里面找出百度指数比较高的,做专题.40 ...

  7. C#百度关键字指数查询Socket实现

    源码下载地址:http://www.sufeinet.com/thread-1072-1-1.html 最近百度公司好像是修改了指数查询的算法,让很多网站都无法进行指数查询,比较站长站,爱站等 知名站 ...

  8. 揭秘!如何快速提高网站权重-关键词百度指数叠加

    简介:如何快速提高 网站权重 ?一看标题相信可能很多人就会说标题档.忽悠人的,因为 网站优化 没有捷径.的确,木木也说过做推广优化没有快速的方法,想要排名就得脚踏实地.但是下面要说的方法确实可以快速提 ...

  9. Python爬取百度指数搜索结果,查看你想了解的热点信息吧

    今天无意间搜索问题的时候跳转到了百度指数这里,索性就打开来看看,下面是首页截图: 这里你可以自己输入自己想要查询的人物.事件等等,anything,只要是你感兴趣的都可以,有一种感觉就是你认为是热点的 ...

最新文章

  1. Linux期末复习题库(2)
  2. torch.where用法
  3. IA32中栈帧结构图
  4. linux如何ARP嗅探 Linux下嗅探工具Dsniff安装记录
  5. TF从文件中读取数据
  6. AUTOSAR专业知识篇(六)-自动驾驶传感器的选择与布置
  7. js 实现简单的轮询
  8. 分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组(转载)
  9. 决策树的python实现
  10. 计算机不属于发明保护客体,如何判断两种类型的计算机程序发明能否成为专利保护客体?...
  11. 熟悉的指标,多重的应用
  12. 今日逢君君不识下一句
  13. php打水印汉字乱码,php 图片水印中文乱码解决方法
  14. 简述tcp协议的可靠性有哪些机制_腾讯面试HTTP与TCP/IP20连问,你能答出多少?
  15. 65.邮件服务器:Postfix
  16. 宏基因组 微生物组 微生态杂志简介及2019最新影响因子
  17. 算法注册机编写扫盲---第五课
  18. Linux第二课 文件系统目录结构
  19. WebRTC的拥塞控制技术(Congestion Control
  20. 叶问短线绝招之拨云见日

热门文章

  1. 【电脑配置】1、Chrome 设置深色模式
  2. 财务自由之路:7年内赚到你的第一个1000万
  3. word2003用不了搜狗输入法
  4. python keyerror列名报错_keyerror
  5. 惠普战x锐龙版2022 评测
  6. 服务器加装内存和硬盘后进不了操作系统,系统安装到内存中是怎么样的体验?RAMOS Win7安装教程...
  7. 如何管理淘宝天猫经销商?ERP+微分销商城?
  8. 小爱音箱mini接入HA,并且通过Node-RED来控制小爱说话
  9. 常见SQL语句(仅供自己复习)
  10. 我,00后中专生,骗人买减肥药,我后悔了……