lkong2weibo almost finish

技术

lol,lkong2weibo完成度已经达到百分之八十

一开始以为可能这个学期都无法完成这个项目,没想到两天能到达这个地步,真的为自己感到高兴。

具体的解决方法

  1. 首先就是用beautifulsoup处理“

    ”标签。网上都说lxml更加强大,但是感觉beautifulsoup的确非常容易上手。就比方说提取p标签tag=soup.find("div","ys-comments-message")。感觉比较容易理解,至少比之前的正则表达式好用太多。其实这应该是最容易的一个部分,因为我主要抓取的就是一个网页,而且优书网的格式还是比较标准的。
  2. 提取完文本以后需要进行两步处理:提取正文和转换编码,msg=tag.get_text(),转换编码在发送部分执行
  3. 接着就是判断是否为最新书评这个部分,这一部分也是我折腾了比较长时间的一个部分。一开始我的想法是提取“xx分钟前”的xx来进行判断,结果刚刚在网上找到相应的正则表达式>>> p = re.compile(r'\d+')>>> p.findall('vid:122313'),并且执行了以后就抓到了第一个bug-用户名中存在数字(我是抓下正文,然后直接提取数字)。为了解决这个问题,我加了个数字是否小于60的判断。结果第二天抓到了第二个bug,“xx小时前”,这样就严重干扰了之前的判断。无奈只好用之前的办法了——把评论文件存在本地,下次抓取后进行比较,相同则不发送。然而sae是不支持本地文件处理的,对应提供的是storage、kvdb、memcache。最后一个需要云豆,果断放弃。而storage在存储文件的时候出现了编码问题,放弃。只能用kvdb了。
  4. 发送微博。也是比较蛋疼的一个部分,一开始怎么都找不到一个简洁一些的发送方式,知道找到了微博比特币价格机器人,不光提供了只需要token的发送方式,还提供了一种比较简单的获取token的方式。p.s:有时候会莫名奇妙地发送失败,所以加了个header伪装一下。
  5. 最后还没有处理好的就是常驻后台,cron一天只能执行32次任务,所以并不完美。
参考连接:[python re 正则表达式 怎么获取vid:122313, 其中的数字?][2]
[Beautiful Soup 4.2.0 文档][3]
[sae python手册][4]