数据库实战 python + PyQt + mongondb

"琅琊榜"

Posted by Mason on August 4, 2019

总结

首先感谢菜鸟学python这个群,极力推荐大家关注该公众号。

这次实战项目收获颇多:

  • 很多之前基础知识点忘记差不多了,甚至有一些出现了混淆,通过这次对部分基础有做了些基础回顾
  • 接触了python桌面应用
  • 对几个知识点做了完整串烧,比如爬虫,数据库,日志。每个知识点中都学到和了解了很多新的库,让我对python生态有了新的认识

代码地址 img

当我拿到python 实战题目时间简单做了下规划,当时大致规划如下图

img 但是现实很骨感,时间长冲突只完成个大概,后面有时间继续完善。 因为关系数据库接触比较多,所以这次因为时间原因我重点放在了非关系数据库上,

涉及技术点

界面

因为对python桌面应用这块学习python来还没接触过,虽然感觉应该和.net的wpf和winform类似,但是还是花费了大量力气。

1.先是对比PyQt和Tkinter,一番查询之后大家都是tk比较丑,推荐qt。至于更多的对比需要下来深入研究下。

2.安装的时候收网络环境影响,安装了几个晚上才安装上,老是超时。 来几张截图 首次加载 img 点击工具栏分类 img 关键字查询 img

数据库

因为本机环境原因,我没有选择本地安装mongondb环境,依然选择了在线环境。刚开始一直想搞一个公共的查询类,这样不用在将来多个collection的时候查询麻烦,网上也查了好多都没有比较完美方案,大多都是和Regex结合使用,最后也是磕磕碰碰勉强实现了个,不过还有大量需要优化和完善的地方。

异常捕获函数 img

查询函数 img

爬虫

这块我选择了scrapy进行爬虫,因为之前练习过几次,这次也是想借此在熟悉熟悉。贴下自己代码,大家给指点下。

获取电影列表清单 img 根据获取清单在爬取详情信息,比如简介,演员清单等 img

爬虫log截图 img

问题引申与扩展

我分为两类带待完成(需要深入研究或者需要在练习)和完成:

  • 1. scrapy怎么进行二级页面数据爬取

  • 2. Scrapy 多个处理函数之间如何传递数据

    多个处理response 函数之间如何传递数据,比如猫眼电影列表页面上爬虫只能获取到基本的相信(名称,id,二级页面URL),其他信息需要通过详情页面获取(上映时间,简介,主演等),类似订单与订单详情,需要两个函数去处理,然后得到一个电影完整实体对象,然后存入数据库。 img

  • 3. 反爬措施:添加随机 UA 和代理 IP

  • 4. scrapy框架中利用xpath和css解析html,以及pyquery

    需要再对这几个库进行多锻炼灵活使用。

  • 5. qt中加入icon

  • 6. Scrapy添加日志

    其他语言比如java或.net都有比较成熟完整的框架比如 log4net ,NLog,Serilog,Exceptionless 等,python中利用logging库进行log处理。

配置

1
2
3
4
5
6
7
import logging

logging.basicConfig(filename="SyncMovie.log", filemode="w", level=logging.DEBUG,
    format="%(asctime)s %(message)s", datefmt="%Y/%m/%d %I:%M:%S %p",
)
logging.warning("warn message")
logging.error("error message")
1
2
3
4
5
6
import logging

FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
logging.basicConfig(level=logging.INFO,format=FORMAT)
logger = logging.getLogger(__name__)

使用

1
2
3
  logging.debug(str(v["name"]))
  
  logger.warning('Protocol problem: %s', 'connection reset', extra=d)
  • 7. 启动定时任务

    将python打包成exe然后挂在到window的定时任务里面。当然关于打包目前还没涉及,需要后面看用什么如何打包。

  • 8. 配置信息管理:gflags,和Configs

    我们在做项目和产品的时候进行需要对各种环境配置信息进行管理:比如dev环境下数据库,Api等地址。 gflags使用(python-gflags):

    configs使用:

    • 通过.ini文件配置
    • 通过YAML文件配置
    • 用JSON格式文件
    • 通过使用环境变量
  • 9. python 程序打包
  • 10. python 电影数据分析,按照得分生成图标,找出某部电影人员关系图谱,
  • 11. 利用宣传图片生成桌面壁纸定时更换,需要获取当前PC的分辨率,生成完整壁纸,了解Python操作系统环境
  • 12. 每周生产当前评分最高的几部电影推送到微信好友中,为好友帅选提供参考

主要知识点总结:

functools 模块:用于高阶函数:指那些作用于函数或者返回其它函数的函数,通常只要是可以被当做函数调用的对象就是这个模块的目标。