基于Python与Scrapy的微信租房机器人实战解析

顾星河
顾星河
发布时间:2026-10-13 | 6人浏览过
原创

本文详细介绍如何利用Python、Scrapy爬虫框架及Whoosh搜索引擎构建一个自动抓取豆瓣租房信息并推送到微信的机器人。通过jieba分词与索引生成API,结合wxBot接口实现定时推送与持久化存储,帮助租房者高效获取实时房源。

项目背景与目标

项目目标

两年前,笔者曾开发过一个用于租房场景的自动化工具,主要功能是从豆瓣租房小组抓取数据并定时推送至微信。该工具运行一段时间后便停止维护。

由于早期代码结构较为简单,未曾公开源码。考虑到开源项目可能有助于其他用户更高效地获取租房信息,现对代码进行整理后在GitHub开源,仓库地址为:https://github.com/facert/zufang(支持本地下载)。

以下是该项目的基本原理说明:

对于身处北京等大城市的人群而言,租房往往是一项耗时耗力的任务。豆瓣租房小组虽然房源相对可靠,但因其信息杂乱且缺乏搜索功能,实时获取目标房源极具挑战。为此,笔者开发了这款微信找房机器人,具体效果可参考下图展示:

技术实现方案

技术实现方案

整体技术架构主要包含三个部分:首先,利用Scrapy爬虫框架对豆瓣北京租房小组进行实时数据抓取,并通过jieba进行中文分词,结合Whoosh引擎对标题和描述建立全文索引,最终封装为API接口。其次,接入微信机器人接口,基于开源项目[[wxBot]]进行修改,实现了定时推送消息及数据持久化存储功能。最后,公众号端也实现了相同的功能,支持用户实时搜索租房信息。

核心代码解析

核心代码片段

Scrapy框架支持自定义Pipeline,这使得在数据录入过程中实时生成索引成为可能。具体实现逻辑见下方代码:


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 相关产品和应用

全部下载

专题列表