背景
- 每天早上第一时间是多个平台查找最新疫情新闻,图表是最能展示问题的,可是看了一些平台都只有累计数字的趋势图,当然看斜率可以看得出事态的发展,但是看【新增人数】的对比图表会更直观一点。那么,自己动手试试吧。
- 数据来源:大家都一定是从一个源头的数据获取的,找了一下,应该是 国家卫健委的数据。
进程
- 需求:每日定时7点--11点,每隔15分钟,爬取内容,正则分析是否有当日的最新标题,有则获取链接,继续爬,获取疫情内容,正则获取6个数据(疑似,确认,死亡【累积人数和新增人数】)分别存入数据库表,用echars+vue显示累积趋势和新增人数趋势。
-
开发
- 爬取内容(python+requests+selenium+pycookiecheat)
- 可能是网站设置的发爬虫的东西,需要带上cookies才能正常通过程序获取正确内容。找了2天,通过postman + inspector,终于知道,需要带上浏览器chrome的cookies才能正常访问,否则返回的header是http1.1 202(什么鬼,查了说是服务器已接收,另外一个进程在处理...,反正就是不对的内容)。
- 首选 selenium,它可以模拟打开chrome并获取cookies,还有很多强大的功能,是一个自动化测试的工具,
- 第一天调试通过,对比chrome的cookies,一样。
- 第二天获取的cookies怎么都不对,和chrome上的不一致,实在找不到原因,只有放弃,知道的朋友请告诉我
- 换个思路获取chrome的cookie:cookie是本地存储浏览器的缓存,一定存在本地某个地方,果然,是一个sqlite文件(/Users/XXX/Library/Application Support/Google/Chrome/Profile 4/Cookies),就是怎么打开这个文件读取出来就好了。
- chrome对cookies有加密,mac和linux的加密方式还不一样,mac还需要与系统匹配才能获取解密。
- 终于找到一个pycookiecheat,几句代码,完美解决。
- chrome_cookies(url,file)第二个参数是默认一个Default目录下的,我也搞不清为什么我的路径会不一样。在Profile 4下面。
- ok,正确获取到cookies了,就能正常获取了。
- 正则获取最新列表链接地址,因为最新疫情日期是昨天的,所以日期上处理了一下。
- 正则获取详情页面数据,并取得各项数据,保存至数据库,并微信提醒公众号成员。
-
mac 定时任务:
- 建立了一个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代码
#!/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个问题未解决
- selenium无法获取正确的chrome的cookie
- mac睡眠黑屏的时候没有网络,就无法定时运行该脚本
-
原来怎么没有做过爬虫项目,也没用过python,通过这几天学习到了
- python 的基本语法
- request fake_useragent BeautifulSoup 的基本用法
- 正则的基本用法
- 了解了selenium自动测试工具
-
pycookiecheat 获取本地chrome的cookie
- shell 的基本语法
- mac的定时任务设置 参考
- 使用了postman + inspector的调试工具
- 安装了一大堆乱七八糟的东西
- 感觉所有东西都是一点一点搜出来的,但是结果还是好的,先记录这里,看看明天是否能正常运行😀。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。为啥我这儿提示pycookiecheat不是使用呢
系统不支持pycookiecheat?