利用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实现批量修改文件名代码
Sep 10 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
Nov 29 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
python将图片转base64,实现前端显示
Jan 09 Python
python字符串,元组,列表,字典互转代码实例详解
Feb 14 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
May 21 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
javascript textContent与innerText的异同分析
2010/10/22 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
jstree单选功能的实现方法
2017/06/07 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
Python最长公共子串算法实例
2015/03/07 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
详解django三种文件下载方式
2018/04/06 Python
djang常用查询SQL语句的使用代码
2019/02/15 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
python的faker库用法
2019/11/28 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
Pandas的数据过滤实现
2021/01/15 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
学生违反校规检讨书
2014/10/28 职场文书
Oracle笔记
2021/04/05 Oracle
python_tkinter弹出对话框创建
2022/03/20 Python