利用Python实现微信找房机器人实例教程


Posted in Python onMarch 10, 2019

目的

两年前曾为了租房做过一个找房机器人 「爬取豆瓣租房并定时推送到微信」,维护一段时间后就荒废了。

当时因为代码比较简单一直没开源,现在想想说不定开源后也能帮助一些同学更好的找到租房信息,所以简单整理后,开源到 github,地址:https://github.com/facert/zufang (本地下载)

下面是当时写的简单原理介绍:

身在帝都的人都知道租房的困难,每次找房都是心力交瘁。其中豆瓣租房小组算是比较靠谱的房源了,但是由于小组信息繁杂,而且没有搜索的功能,想要实时获取租房信息是件很困难的事情,所以最近给自己挖了个坑,做个微信找房机器人,先看大概效果吧,见下图:

利用Python实现微信找房机器人实例教程

利用Python实现微信找房机器人实例教程

实现

说下大概的技术实现吧,首先是 scrapy 爬虫对于豆瓣北京租房的小组实时爬取,并做了全文检索,对 title, description 使用 jieba 和 whoosh 进行了分词和索引,做成 api。接下来就是应用的接入,网上有微信机器人的开源 [wxBot](http://github.com/liuwons/wxBo),所以对它进行了修改, 实现了定时推送和持久化。最后顺便把公众号也做了同样的功能,支持实时租房信息搜索。

部分代码

scrapy 支持自定义 pipeline,能很方便的实现数据录入的时候实时生成索引,见 code:

class IndexPipeline(object):

 def __init__(self, index):
 self.index = index

 @classmethod
 def from_crawler(cls, crawler):
 return cls(
  index=crawler.settings.get('WHOOSH_INDEX', 'indexes')
 )

 def process_item(self, item, spider):
 self.writer = AsyncWriter(get_index(self.index, zufang_schema))
 create_time = datetime.datetime.strptime(item['create_time'], "%Y-%m-%d %H:%M:%S")
 self.writer.update_document(
  url=item['url'].decode('utf-8'),
  title=item['title'],
  description=item['description'],
  create_time=create_time
 )
 self.writer.commit()
 return item

搜索 api 代码很简单:

def zufang_query(keywords, limit=100):
 ix = get_index('indexes', zufang_schema)
 content = ["title", "description"]
 query = MultifieldParser(content, ix.schema).parse(keywords)
 result_list = []
 with ix.searcher() as searcher:
 results = searcher.search(query, sortedby="create_time", reverse=True, limit=limit)
 for i in results:
  result_list.append({'url': i['url'], 'title': i['title'], 'create_time': i['create_time']})
 return result_list

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python实现的文件同步服务器实例
Jun 02 Python
Python使用django搭建web开发环境
Jun 09 Python
python reduce 函数使用详解
Dec 05 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
python实现键盘控制鼠标移动
Nov 27 Python
Python+opencv 实现图片文字的分割的方法示例
Jul 04 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
python实现超市商品销售管理系统
Oct 25 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
python 爬取小说并下载的示例
Dec 07 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
Jan 09 Python
谈谈Python中的while循环语句
Mar 10 #Python
15行Python代码实现网易云热门歌单实例教程
Mar 10 #Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 #Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 #Python
Python高级特性与几种函数的讲解
Mar 08 #Python
Python I/O与进程的详细讲解
Mar 08 #Python
举例讲解Python常用模块
Mar 08 #Python
You might like
用PHP实现多级树型菜单
2006/10/09 PHP
深入掌握include_once与require_once的区别
2013/06/17 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
jQuery中get()方法用法实例
2014/12/27 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
什么是唯一索引
2015/07/05 面试题
Ado与Ado.net的相同与不同
2014/12/08 面试题
幼儿园美术教学反思
2014/01/31 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
2015年大学生工作总结
2015/04/21 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL