利用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合并字符串的3种方法
May 21 Python
Python实现网络端口转发和重定向的方法
Sep 19 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
python实现决策树分类
Aug 30 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
python如何编写win程序
Jun 08 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
Sep 04 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
python 统计代码耗时的几种方法分享
Apr 02 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 全文搜索和替换的实现代码
2008/07/29 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
php中请求url的五种方法总结
2017/07/13 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
javascript禁止超链接跳转的方法
2016/02/02 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
Vue中props的使用详解
2018/06/15 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
用python登录Dr.com思路以及代码分享
2014/06/25 Python
wxPython框架类和面板类的使用实例
2014/09/28 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
Python中if有多个条件处理方法
2020/02/26 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
python logging模块的使用详解
2020/10/23 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
什么是封装
2013/03/26 面试题
销售部主管岗位职责
2013/12/18 职场文书
总裁办公室主任职责
2014/01/02 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
博士给导师的自荐信
2015/03/06 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
Django中celery的使用项目实例
2022/07/07 Python