利用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中cPickle用法例子分享
Jan 03 Python
RC4文件加密的python实现方法
Jun 30 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
Apr 11 Python
python安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
python指定写入文件时的编码格式方法
Jun 07 Python
python抓取京东小米8手机配置信息
Nov 13 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
python计算n的阶乘的方法代码
Oct 25 Python
python新手学习可变和不可变对象
Jun 11 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
Jupyter Notebook 远程访问配置详解
Jan 11 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字符串分割函数explode的实例代码
2013/02/07 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
javascript 定义新对象方法
2010/02/20 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
python删除某个字符
2018/03/19 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
python中下标和切片的使用方法解析
2019/08/27 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
晚归检讨书
2014/02/19 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
优秀教研组申报材料
2014/12/26 职场文书
经济纠纷起诉状
2015/05/20 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
go goroutine 怎样进行错误处理
2021/07/16 Golang
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python
mysql sock文件存储了什么信息
2022/07/15 MySQL