利用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利用datetime模块计算时间差
Aug 04 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
浅谈python中的占位符
Nov 09 Python
pandas多级分组实现排序的方法
Apr 20 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
Python打印特殊符号及对应编码解析
May 07 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
Jun 09 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 Python
python 闭包函数详细介绍
Apr 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+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
php处理抢购类功能的高并发请求
2018/02/08 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
jquery操作cookie插件分享
2014/01/14 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
axios实现文件上传并获取进度
2020/03/25 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
Python文件操作类操作实例详解
2014/07/11 Python
python实现统计代码行数的方法
2015/05/22 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
css sprite简单实例
2016/05/23 HTML / CSS
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
销售找工作求职信
2013/12/20 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
新学期开学标语
2014/06/30 职场文书
个人授权委托书范文
2014/09/21 职场文书
交通事故和解协议书
2014/09/25 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
Golang 结构体数据集合
2022/04/22 Golang
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers