利用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 Web框架Flask信号机制(signals)介绍
Jan 01 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
Aug 12 Python
在TensorFlow中屏蔽warning的方式
Feb 04 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
Python如何将函数值赋给变量
Apr 28 Python
Django bulk_create()、update()与数据库事务的效率对比分析
May 15 Python
python变量的作用域是什么
May 26 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
python链表类中获取元素实例方法
Feb 23 Python
python用tkinter开发的扫雷游戏
Jun 01 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实现简单实用的分页类代码
2016/04/08 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
javascript每日必学之多态
2016/02/23 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
浅析python redis的连接及相关操作
2019/11/07 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
房地产员工找工作的自我评价
2013/11/15 职场文书
企业文化演讲稿
2014/05/20 职场文书
家长会欢迎标语
2014/06/24 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
刑事代理授权委托书
2014/09/17 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang