利用Python实现微信找房机器人实例教程
作者:facert 发布时间:2022-12-09 09:12:27
标签:python,微信,机器人
目的
两年前曾为了租房做过一个找房机器人 「爬取豆瓣租房并定时推送到微信」,维护一段时间后就荒废了。
当时因为代码比较简单一直没开源,现在想想说不定开源后也能帮助一些同学更好的找到租房信息,所以简单整理后,开源到 github,地址:https://github.com/facert/zufang (本地下载)
下面是当时写的简单原理介绍:
身在帝都的人都知道租房的困难,每次找房都是心力交瘁。其中豆瓣租房小组算是比较靠谱的房源了,但是由于小组信息繁杂,而且没有搜索的功能,想要实时获取租房信息是件很困难的事情,所以最近给自己挖了个坑,做个微信找房机器人,先看大概效果吧,见下图:
实现
说下大概的技术实现吧,首先是 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
来源:https://zhuanlan.zhihu.com/p/58791190


猜你喜欢
- 推荐idea最新激活码:最新Idea激活码永久激活(最新测试有效)https://www.jb51.net/article/178193.h
- counter 是一种特殊的字典,主要方便用来计数,key 是要计数的 item,value 保存的是个数。from collections
- 前言本文主要介绍的是基于centos7进行yum安装lnmp(linux+nginx+php7.1+mysql5.7)的相关教程,文中将一步
- Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:163
- 安装pyinstallpip install pyinstaller注意事项除非必要,否则尽量不要直接import module,用from
- 一、死锁简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况。1、迭代死锁该情
- 网页可以说是网站构成的基本元素。当我们轻点鼠标,在网海中遨游,一幅幅精彩的网页会呈现在我们面前,那么,网页的精彩与否的因素是什么呢?色彩的搭
- 1. 介绍BoltBoltDB是纯Go语言实现的持久化解决方案,保存数据至内存映射文件。称之为持久化解决方案不是数据库,因为数据库这个词有很
- 导语🎼嗨,大宝贝们,又到周末啦,今天你放假了嘛?周末的日子总是无所事事,无所事事。一直在想做什么游戏,给大家来点儿新鲜感,这不?玩游戏、找游
- numpy 数组及运算扩展库 numpy 是 Python 支持科学计算的重要扩展库,是数据分析和科学计算领域如 scipy、pa
- GetRows 方法 将 Recordset 对象的多个记录复制到数组中。 语法 代码如下: array = recordset.GetR
- 前言大家都知道,早期的XMLHttpRequest不支持文件上传,一般用第三方js插件或者flash,现在可以借助XMLHttpReques
- 一、 前期准备1. 设置GPU如果设备上支持GPU就使用GPU,否则使用CPUimport torchimport torch.nn as
- 年初的时候一直在做一个网站MSSQL2000 -> MySQL5的迁移工作,因为采用了不同的程序系统,所以主要问题
- 生产图片区域,上传按钮#btn可替换自己想要的图片<ul id="ul_pics" class="ul_
- Go 语言中 goroutine + channel 通过通信的方式来共享内存,从而实现并发编程。但同时 Go 也提供了传统通过共享变量,也
- python对多国语言的处理是支持的很好的,它可以处理现在任意编码的字符,这里深入的研究一下python对多种不同语言的处理。有一点需要清楚
- 引言这算是一个高级用法了,前面我们只说到对类型、变量的几种反射的用法,包括如何获取其值、其类型、以及如何重新设置新值。但是在项目应用中,另外
- 交换变量 x = 6y = 5x, y = y, xprint x>>> 5print y>>>
- em 和 strong 的区别,可以从三个层次上来谈。首先看 HTML 4.01 中的说明:EM: Indicates emphasis.S