武汉新冠肺炎疫情信息爬取

2019/04/10 10:10
阅读数 10

武汉新冠肺炎疫情信息爬取

身处疫情中心,在家无聊写了个小程序,每天自动抓取武汉卫健委公布的武汉地区的最新具体数据。

获取网站上的公布的数据后,自动转发到我的邮箱。

 

代码模块

  • main.py :利用requests库,进行网站爬虫抓取疫情数据的逻辑
  • mymail.py:邮箱功能的实现,将邮件从新浪邮箱转发到QQ邮箱
  • anslyse.py:分析data.txt内的每日疫情数据,利用plt展现每日变化结果

 

运行方式

在购买的腾讯云服务器上,添加上述代码。

  1. Python版本 3.6.2 (Ubuntu自带Python 3.5会import lxml失败)

    Linux上最好安装 Anaconda:

    sudo apt-get install anaconda

  2. 安装依赖库

    • requests:爬取网页上的数据
    • lxml :解析HTML元素
     pip install requests
     pip install lxml
    
  3. 运行代码

    • python main.py :这种方式关闭远程连接服务器的终端窗口会杀掉程序

    • 网上了解到有三种方式避免

      • nohup : nohup <command> [argument…] &
      • tmux: 比较强大,使用可能有些复杂,参考博客有待今后学习
      • screen:screen [ -options ] [ cmd [ args ] ]
    • screen 比较简单方便

      screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。当断开或关闭终端时,只要不杀死screen的进程,待重新连接后任能继续断开前的操作。

      将输出记录在日志的方式运行代码

      screen -L python main.py

 

踩过的坑

  • session对象的属性linksabsolute_links 返回的是集合set,即使转成list也是无序的

    因此从html源文件中读取到第 k 条新闻title与links[k]并不一一对应

  • 解决方法:

    • [x] 使用正规式解析新闻列表元素
    • [ ] 尝试打开所有链接,检查新的页面是否是疫情信息发布页面
  • 腾讯云服务器上无法运行利用requests_html库进行爬虫的代码,报错信息:ImportError: cannot import name ‘Coroutine’

    具体在 from typing import Coroutine 原因不明

  • 解决方法:

    • [ ] 改用requests库,配合使用 lxml 重新编写了代码

 

结果展示

邮件列表 自动接收的邮件列表

 

收获

  • 能够使用Python编写简单的爬虫程序,抓取想要的信息
  • 简单实践了Python发送邮件
  • 熟悉了正则表达式的使用,根据需要分离有效数据
  • 优化代码过程中,熟悉了map、zip等操作,简短的代码体现出了Python语言的优雅简洁之美

 

完整代码见我的github项目

 

(完)

原文出处:https://www.cnblogs.com/izcat/p/12466026.html

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部