利用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编写简单的小程序编译成exe跑在win10上
Jan 15 Python
Python面向对象之继承代码详解
Jan 29 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
对python中类的继承与方法重写介绍
Jan 20 Python
python读取.mat文件的数据及实例代码
Jul 12 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
tensorflow 模型权重导出实例
Jan 24 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
Python requests模块session代码实例
Apr 14 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
详解Python牛顿插值法
May 11 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
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
JavaScript 布尔操作符解析  && || !
2012/08/10 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
python定时复制远程文件夹中所有文件
2019/04/30 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
C语言中break与continue的区别
2012/07/12 面试题
《英英学古诗》教学反思
2014/04/11 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
项目经理任命书
2014/06/04 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
Python面向对象之成员相关知识总结
2021/06/24 Python
DSP接收机前端设想
2022/04/05 无线电
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android