利用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学习笔记 下载
Feb 10 Python
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 Python
浅析Python中的多重继承
Apr 28 Python
Python读写文件方法总结
Jun 09 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
python-视频分帧&多帧合成视频实例
Dec 10 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
Python callable内置函数原理解析
Mar 05 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 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
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
详解Vuex中mapState的具体用法
2017/09/28 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
2018/05/08 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python迭代用法实例教程
2014/09/08 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
Python如何实现文本转语音
2016/08/08 Python
快速查询Python文档方法分享
2017/12/27 Python
Python爬虫实战:分析《战狼2》豆瓣影评
2018/03/26 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python文件操作方法详解
2020/02/09 Python
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
Athleta官网:购买女士瑜伽服、技术运动服和休闲运动服
2020/11/12 全球购物
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
教师自我鉴定范文
2014/03/20 职场文书
平安校园建设方案
2014/05/02 职场文书
天地会口号
2014/06/17 职场文书
车辆转让协议书
2014/09/24 职场文书