专栏首页呼延超简单的shell爬虫示例

超简单的shell爬虫示例

首先,我并不太会爬虫,shell编程也是一知半解,这次纯粹是需求驱动。

因此,在下方的实现方法并不一定是最优解,甚至是比较笨的解决方法,但是仍然决定记录下来。

需求

我的一部分博客偶尔也发在csdn上面,然后由于自己的”小心思”,我老是想知道自己在csdn的排名及浏览量是多少,每次登陆去查看显得太烦了,因此写了个shell脚本,每天自动抓取自己账号的浏览量及排名存进mysql中。

这样就可以直接在服务器上的mysql中查看排名,以方便后续扩展,无论是写个接口方便自己查看,还是用图标展示,都方便许多。

实现

1.在mysql中创建数据库

CREATE TABLE `csdn` (
  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `rank` int(20) NOT NULL DEFAULT '1' COMMENT '排名',
  `view` int(20) NOT NULL DEFAULT '1' COMMENT '浏览量',
  `date` varchar(128) NOT NULL DEFAULT 'wrong' COMMENT '日期',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_at` timestamp NOT NULL DEFAULT '2018-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8

2.编写shell脚本

#获取排名
rank=`curl https://me.csdn.net/qq_24629159 | grep -B1 "排名" | grep -o "[0-9]*[1-9][0-9]*"`
#获取浏览量
view=`curl https://me.csdn.net/qq_24629159 | grep -B1 "访问" | grep -o "[0-9]*[1-9][0-9]*"`
#日期
date=`date +%Y%m%d`
#打印日志
echo "${date}的排名为${rank},浏览量为${view}"
#插入到数据库
mysql -u root -p******* -D mydb -e "insert into csdn(rank,view,date) values ("$rank", "$view","${date}")"

在获取csdn上的数据时,使用了简单粗暴的grep,原理是先获取我个人页面的所有源码,然后根据源码发现,排名数字在排名字符串上一行,因此搜索得到上一行,之后再拿到的一行里面匹配整数。

csdn个人页面的源码如下:

3.设置定时执行

定时执行我们使用unix系统自带的corntab。

执行corntab -e,打开编辑页面,之后在文件中添加一行30 3 * * * /bin/bash /usr/huyan/csdn_rank.sh >> /usr/huyan/csdn_rank.log,这代表着在每天的凌晨三点半执行该脚本并将日志输出到后面的文件中。

之后重启crontab以使我们的任务生效service cron restart.

好了,到了这里就完成啦,以后就可以再数据库中直接看到以往的排名信息及浏览量了。

完。

ChangeLog

2018-11-16 完成

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com

更多学习笔记见个人博客——>呼延十

var gitment = new Gitment({ id: '超简单的shell爬虫示例', // 可选。默认为 location.href owner: 'hublanker', repo: 'blog', oauth: { client_id: '2297651c181f632a31db', client_secret: 'a62f60d8da404586acc965a2ba6a6da9f053703b', }, }) gitment.render('container')



本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot Mybatis Web 开发环境搭建

    Spring Boot 使您能轻松地创建独立的、生产级的、基于 Spring 且能直接运行的应用程序。我们对 Spring 平台和第三方库有自己的看法,所以您从...

    呼延十
  • 布隆过滤器(bloom filter)的原理及在推荐去重中的应用

    在业务中,我需要给每个用户保存1w条浏览记录,之后每一次的返回值都要和历史记录做一个去重,即保证用户不会重复看到同一篇文章.

    呼延十
  • Docker初步学习

    公司的服务都使用Docker部署,虽然这块和我关系不大,但是我在测试环境启动时,老是会报错,所以我打算学习一下基本的Docker知识,方便自己在测试环境调试。

    呼延十
  • 跟Science文章学绘图:多数据对比图这样画

    图片来源:Wang et al., Science 366, 216–221 (2019)

    百味科研芝士
  • 查看Surface电池报告

    我的surface pro 4电脑到现在已经将近4年了,这4年里虽然用的次数并不多,但是在很多时候也是帮了我的大忙。最近总觉得电池越来越不经用,我的是最省电的M...

    徐大嘴
  • LeetCode No.14 最长公共前缀

    输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明:

    week
  • ListView的addHeaderView()方法相关问题

    听着music睡
  • Mybatis问题:There is no getter for property named ‘stype’ in ‘class java.lang.Integer’

    在做一个查询时,传的参数是个Integer类型的变量,而不是键值对式的,同时在xml中对其进行了判断。代码如下:

    汐楓
  • 如何将Pastebin上的信息应用于安全分析和威胁情报领域

    FreeBuf百科 Pastebin是一个便签类站点,用户可以在该平台任意储存纯文本,例如代码,文字等内容。Pastebin支持的编程语言种类也非常齐全,还会自...

    FB客服
  • 【原创】Spring Boot终极篇《上》

    目前Spring Boot有多火,相信大家都能感受到,SpringBoot仿佛现在成为一个java开发中必备的技能之一。另外一方面,其实真正只有使用过的人才知道...

    田维常

扫码关注云+社区

领取腾讯云代金券