利用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反射的用法实例分析
Feb 11 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
Python中一行和多行import模块问题
Apr 01 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
Apr 27 Python
Python中的TCP socket写法示例
May 11 Python
基于Python pip用国内镜像下载的方法
Jun 12 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
Jun 26 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
django序列化serializers过程解析
Dec 14 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 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/04/09 PHP
smarty section简介与用法分析
2008/10/03 PHP
2014过年倒计时示例
2014/01/31 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
js中的push和join方法使用介绍
2013/10/08 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
vue实现简单的MVVM框架
2018/08/05 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
Python实现学校管理系统
2018/01/11 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
行政人员工作职责
2013/12/05 职场文书
人力资源专员岗位职责
2014/01/30 职场文书
房屋过户委托书范本
2014/10/07 职场文书
教师节简报
2015/07/20 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android