记录 疫情 数据爬虫 python分析

背景

  • 天天早上第一时间是多个平台查找最新疫情新闻,图表是最能展现问题的,但是看了一些平台都只有累计数字的趋势图,固然看斜率能够看得出事态的发展,可是看【新增人数】的对比图表会更直观一点。那么,本身动手试试吧。
  • 数据来源:你们都必定是从一个源头的数据获取的,找了一下,应该是 国家卫健委的数据。

进程

  • 需求:每日定时7点--11点,每隔15分钟,爬取内容,正则分析是否有当日的最新标题,有则获取连接,继续爬,获取疫情内容,正则获取6个数据(疑似,确认,死亡【累积人数和新增人数】)分别存入数据库表,用echars+vue显示累积趋势和新增人数趋势。
  • 开发html

    • 爬取内容(python+requests+selenium+pycookiecheat)
    • image.png
    • 多是网站设置的发爬虫的东西,须要带上cookies才能正常经过程序获取正确内容。找了2天,经过postman + inspector,终于知道,须要带上浏览器chrome的cookies才能正常访问,不然返回的header是http1.1 202(什么鬼,查了说是服务器已接收,另一个进程在处理...,反正就是不对的内容)。
    • 首选 selenium,它能够模拟打开chrome并获取cookies,还有不少强大的功能,是一个自动化测试的工具,
    • image.png
    • 第一天调试经过,对比chrome的cookies,同样。
    • 次日获取的cookies怎么都不对,和chrome上的不一致,实在找不到缘由,只有放弃,知道的朋友请告诉我
    • 换个思路获取chrome的cookie:cookie是本地存储浏览器的缓存,必定存在本地某个地方,果真,是一个sqlite文件(/Users/XXX/Library/Application Support/Google/Chrome/Profile 4/Cookies),就是怎么打开这个文件读取出来就行了。
    • chrome对cookies有加密,mac和linux的加密方式还不同,mac还须要与系统匹配才能获取解密。
    • 终于找到一个pycookiecheat,几句代码,完美解决。
    • image.png
    • chrome_cookies(url,file)第二个参数是默认一个Default目录下的,我也搞不清为何个人路径会不同。在Profile 4下面。
    • ok,正确获取到cookies了,就能正常获取了。
    • 正则获取最新列表连接地址,由于最新疫情日期是昨天的,因此日期上处理了一下。
    • image.png
    • 正则获取详情页面数据,并取得各项数据,保存至数据库,并微信提醒公众号成员。
    • image.png
    • mac 定时任务:vue

      • 创建了一个sh,用mac的crontab设置。天天早上7点-11点,每隔15分钟运行一次,并输出log。(crontab多是权限的问题,拿不到cookies的密码,改用launchctl)
      • 新建文件 /Users/*/Library/LaunchAgents/com.zuing.epid.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!-- launchctl load com.zuing.epid.plist -->
<!-- launchctl start com.zuing.epid.plist -->
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.zuing.epid.plist</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Users/***/Documents/spider/epid.sh</string>
  </array>
  <key>StartCalendarInterval</key>
  <dict>
        <key>Minute</key>
        <integer>0</integer>
        <key>Hour</key>
        <integer>7</integer>
  </dict>

  <key>StartInterval</key>
  <integer>600</integer>
<key>StandardOutPath</key>
<string>/Users/zuing/Documents/spider/log</string>
<key>StandardErrorPath</key>
<string>/Users/zuing/Documents/spider/log</string>
</dict>
</plist>
  • 加载 launchctl load com.zuing.epid.plist
  • 卸载 launchctl unload com.zuing.epid.plist
  • 当即运行 launchctl start com.zuing.epid.plist
  • 修改plist文件后,必需要unload,load才起做用
  • sh代码python

    #!/bin/sh
    
    echo '######## ' `date '+%Y-%m-%d %H:%M:%S'` '########' >> /Users/***/spider/log &&
    osascript -e 'display notification "正在获取疫情信息" with title "获取疫情" subtitle "......"'
    # 这里用launchctl,前面要加encode
    PYTHONIOENCODING=utf-8 /usr/local/bin/python3 /Users/***/spider/s2.py >>/Users/***spider/log
    echo '######## done ########\n' >> /Users/***/spider/log
    * `0,15,30,45 7-11 * * * /Users/****/epid.sh`
     * 这里当mac睡眠黑屏的时候没有网络,就没法运行该脚本,仍是没有解决,请知道的朋友告诉一下。
     * 公众号推送和图表vue+echarts
     * vue使用echarts
         
         ```
         # mail.js里加载
         import echarts from 'echarts'  
         Vue.prototype.$echarts = echarts
         # 在vue里就能够用了 
         this.myChart = this.$echarts.init(document.getElementById('chart'));
         ```

总结

  • 留下2个问题未解决linux

    • selenium没法获取正确的chrome的cookie
    • mac睡眠黑屏的时候没有网络,就没法定时运行该脚本
  • 原来怎么没有作过爬虫项目,也没用过python,经过这几天学习到了git

    • python 的基本语法
    • request fake_useragent BeautifulSoup 的基本用法
    • 正则的基本用法
    • 了解了selenium自动测试工具
    • pycookiecheat 获取本地chrome的cookiegithub

    • shell 的基本语法
    • mac的定时任务设置 参考
    • 使用了postman + inspector的调试工具
    • 安装了一大堆乱七八糟的东西
    • 感受全部东西都是一点一点搜出来的,可是结果仍是好的,先记录这里,看看明天是否能正常运行😀。

最后效果

image.png
image.png
image.png

相关文章
相关标签/搜索