利用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逐行读取文件内容的三种方法
Jan 20 Python
python中的字典使用分享
Jul 31 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
用python实现k近邻算法的示例代码
Sep 06 Python
Python比较配置文件的方法实例详解
Jun 06 Python
Python获取时间戳代码实例
Sep 24 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
python实现简单猜单词游戏
Dec 24 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 Python
python中scipy.stats产生随机数实例讲解
Feb 19 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
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
vue模块拖拽实现示例代码
2019/03/09 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python单链表简单实现代码
2016/04/27 Python
Django 开发环境配置过程详解
2019/07/18 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
就业自荐信
2013/12/04 职场文书
初中英语课后反思
2014/04/25 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
防止web项目中的SQL注入
2021/12/06 MySQL
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android