一个每天面对996的工作和头发脱落的屌丝程序员,每天喝点鸡汤是很有必要的。「ONE·一个」是由韩寒监制 ,原《独唱团》主创成员共同制作的一款文艺生活App,我们可以解析他的网页版,获取每日一句添加到我们的博客中作为每日鸡汤。
网页版的 「ONE·一个」 地址在这里,域名也是很有个性:http://wufazhuce.com/
一、分析网页源代码
右键查看网页源代码,可以看到如下主要内容:
<div class="carousel-inner">
<div class="item active">
<a href="http://wufazhuce.com/one/2453"><img class="fp-one-imagen" src="http://image.wufazhuce.com/FuZdQPkVrjTHBVrABNVN3SITeuF6" alt="" /></a>
<div class="fp-one-imagen-footer">摄影 </div>
<div class="fp-one-cita-wrapper">
<div class="fp-one-titulo-pubdate">
<p class="titulo">VOL.2416</p>
<p class="dom">19</p>
<p class="may">May 2019</p>
</div>
<div class="fp-one-cita">
<a href="http://wufazhuce.com/one/2453">以清净心看世界,以欢喜心过生活,<br />
以平常心生情味,以柔软心除挂碍。</a>
</div>
<div class="clearfix"></div>
</div>
</div>
<div class="item">
<a href="http://wufazhuce.com/one/2447"><img class="fp-one-imagen" src="http://image.wufazhuce.com/FmNkNdQGl5noSOg8WeHtoNDWUkO1" alt="" /></a>
<div class="fp-one-imagen-footer">摄影 </div>
<div class="fp-one-cita-wrapper">
<div class="fp-one-titulo-pubdate">
<p class="titulo">VOL.2415</p>
<p class="dom">18</p>
<p class="may">May 2019</p>
</div>
<div class="fp-one-cita">
<a href="http://wufazhuce.com/one/2447">给自己时间,不要焦急,一步一步来,一日一日过,请相信生命的韧性是惊人的,跟自己向上的心去合作,不要放弃对自己的爱护。</a>
</div>
<div class="clearfix"></div>
</div>
</div>
可以看到,每天的内容主要有几部分:图片链接、VOL期号、发布日期、文字内容等。我们这里需要他的最新的文字内容。看下他的规律,基本格式都是如下格式:
<a href="http://wufazhuce.com/one/2453">以清净心看世界,以欢喜心过生活,<br />以平常心生情味,以柔软心除挂碍。</a></div>
二、编写正则表达式
于是直接解析,代码如下:
#! /usr/bin/python3
# coding: UTF-8
import requests
import re
def getInfo(url):
r = requests.get(url)
r.encoding = 'utf-8'
res = r.text
list = re.findall(r'<a href="http://wufazhuce.com/one/([\w\W]*?)a>',res)
for i in list:
print(i)
getInfo("http://wufazhuce.com")
由于这里我也不清楚他的“http://wufazhuce.com/one/”后面加的数字是有啥规律,所以直接暴力解析了。。。有点挫,大家或许有更好的办法。末尾解析到“a>”是为了更方便的二次解析。
这里最开始正则表达式我写了个(.+?),结果是有问题的。因为他的文本中可能有换行,而 ’.‘ 是只能匹配除了换行之外的任意字符,研究半天才看明白。([\w\W]*?) 这个是匹配所有字符。
正则表达式还是需要多多练习使用啊!上述代码可以看到匹配到的字符串如下:
2453"><img class="fp-one-imagen" src="http://image.wufazhuce.com/FuZdQPkVrjTHBVrABNVN3SITeuF6" alt="" /></
2453">以清净心看世界,以欢喜心过生活,<br />
以平常心生情味,以柔软心除挂碍。</
2447"><img class="fp-one-imagen" src="http://image.wufazhuce.com/FmNkNdQGl5noSOg8WeHtoNDWUkO1" alt="" /></
2447">给自己时间,不要焦急,一步一步来,一日一日过,请相信生命的韧性是惊人的,跟自己向上的心去合作,不要放弃对自己的爱护。</
2444"><img class="fp-one-imagen" src="http://image.wufazhuce.com/FmDRhuIK_mfJ9xs5iq8g-gfAA0nd" alt="" /></
2444">人终究是一个孤独的个体,纵使你已经拥有了他人的怀抱。这其中,也许人与人之间唯一不同的,只是你把孤独藏在哪里。 </
2452"><img class="fp-one-imagen" src="http://image.wufazhuce.com/FtrSsx4XrnGtHNJNOS9nH1ncZ6U8" alt="" /></
2452">我们或许都曾天真地以为爱是定数,<br />
就像确定烘焙配方。<br />
但幸福是不可预计,<br />
是全心付出然后将期望交付于未知。<br />
</
2448"><img class="fp-one-imagen" src="http://image.wufazhuce.com/FruPKzpfLPd23sRF5XtLv8oStUIm" alt="" /></
2448">人生如梦,我投入的却是真情。</
2442"><img class="fp-one-imagen" src="http://image.wufazhuce.com/FjlN3qEQngUwdr7163SLykuwpaYo" alt="" /></
2442">当人们期待着一件好东西到来时,会发现它往往来得既迟缓又艰难,而且它还会附带着各种各样令人急不得、恼不得的细琐麻烦的事,和一切人们在预想中没有顾及到的现实的灰尘。</
2440"><img class="fp-one-imagen" src="http://image.wufazhuce.com/FlogLFLcYDTRl3vd4ZCye4hN7qHl" alt="" /></
2440">我们听到的一切都是一个观点,不是事实。我们看见的一切都是一个视角,不是真相。</
我这里只要每天最新的一句,可以看到最新的一句话是第二个字段,也就是list[1],于是继续解析一下:
words = "\n".join(re.findall(r'">([\w\W]*?)</',list[1]))
print('words = ', words)
解析打印结果:
words = 以清净心看世界,以欢喜心过生活,<br />
以平常心生情味,以柔软心除挂碍。
到这里,我们就得到了想要的每日鸡汤,最后加到博客网站中即可。
三、设置自动任务
每日鸡汤要自动更新到网站中,依靠博主每天自己加那还是太累了。于是想了个简单的实现方法,将这个脚本加入到linux的定时任务中,每天的8点左右获取每日鸡汤写入文件,网页加载时读取文件即可。这里使用的时linux的crontab 来实现定时任务的执行。crontab的相关操作改天再详细写一下,简单的操作如下:
~# crontab -e
添加下面一句即可:
# 每天早上8点7分 执行one.py 来获取one的每日一句
7 8 * * * /home/one.py
/*
crontab启动:/etc/init.d/cron start ( service cron start )
crontab重启: /etc/init.d/cron restart (service cron restart )
crontab关闭: /etc/init.d/cron stop ( service cron stop )
*/
大功告成,每日鸡汤~喝喝喝!!!(不知道有没有什么bug,过几天看看~)