定时爬虫更新网站首页内容

前言

我做自己网站时,觉得内容有点空洞,想到有道翻译首页每天都会更新图片和名言,还挺有意思的,不如我去抄一抄吧。

最后没抄有道翻译,而是去抄了ONE,因为我之前用爬虫爬过ONE的名言,为了省事,我就是这么懒。

先放上效果图
在这里插入图片描述
这个框里的图片、日期、格言会每日自动更新

在这里插入图片描述
这个是我参考的版式,要特别感谢帮我排版的妹子,拯救了我糟糕的审美,哈哈。

具体流程

用爬虫收集想要的信息

这里用的方法还是python的BeautifulSoup。在我之前的文章里详细说过用法,我也上传过代码到git上
用爬虫爬取 boss直聘 招聘信息文章链接

除了爬取名言外,还需要下载图片,用到了urllib.request.urlretrieve方法

urllib.request.urlretrieve(img_url,img_name)

也可以这么写,这样能看到下载进度

urllib.request.urlretrieve(img_url,img_name,download_schedule)

def download_schedule(a,b,c):
    """
    a:已经下载的数据块
    b:数据块的大小
    c:远程文件的大小
    """
    per = 100.0*float(a*b)/float(c)
    if per > 100:
        per = 100
    print("a", a)
    print("b", b)
    print("c", c)
    print('{:.2f}%'.format(per))

将内容写入数据库

我用了Mysql数据库,设置了四个字段,id(主键 自增)、date(日期,string)、motto(名言,Text)、img(img_url,string)

爬虫爬取了相应信息后,用pymysql写入数据库,记录一下pymysql的用法

db = pymysql.connect(db_ip,user,pwd,db_name,charset='utf8')   //创建连接
cursor = db.cursor()   //设置游标
cursor.execute("DROP TABLE IF EXISTS t_motto")    //用了mysql原生语句创建一个表
sql = """CREATE TABLE t_motto (
         id INT NOT NULL AUTO_INCREMENT,
         date  CHAR(10),
         url  CHAR(80),
         motto TEXT(300),
         PRIMARY KEY (`id`))"""
cursor.execute(sql)  //执行mysql语句
db.close()   //关闭连接

插入数据:

db = pymysql.connect(db_ip,user,pwd,db_name,charset='utf8')   //创建连接
cursor = db.cursor()   //设置游标
sql = "INSERT INTO t_motto(date,url, motto) VALUES ( '%s', '%s', '%s')" % ('2019-05-23', './0604.jpg', '难来')
try:
	cursor.execute(sql)    //尝试执行mysql语句
    db.commit()
except:
    db.rollback()      //回档
db.close() 

设置定时脚本

我的服务器是ubuntu系统,因此我使用了linux系统的crontab执行定时任务(当然也可以用python的定时模块APScheduler,个人感觉还是crontab好用)

这里有个小坑,我发现ONE并不是过了晚上十二点就马上更新名言,于是我将定时脚本设置为早上六点执行,这样比较保险

crontab
文件路径:/etc/crontab
文件内容:

#运行环境
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

#分(0-59) 小时(1-23) 日(1-31) 月(1-12) dayofweek周几(0-6) 用户权限 执行的命令
m h dom mon dow user  command

# *表示所有可用值  ‘/’可以用来表示每隔一段时间 minute:*/2表示每两分钟 run-parts表示运行文件夹所有脚本

#写一个shell脚本用于执行python脚本,在crontab文件中新增一行定时执行该shell脚本的指令
 //查询所有用户的定时任务
cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}  

//查看当前用户的定时任务
crontab -l

后端读取数据库

从相应的表中,取出id最大的数据,用于显示在前端界面。
这里要注意图片路径问题,后端框架一般只认相对路径,如果在数据库里写的是绝对路径,就要再做一次转换。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值