V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
facert
V2EX  ›  分享创造

微信找房机器人 python 实现

  •  
  •   facert · 2016-11-21 19:59:08 +08:00 · 3267 次点击
    这是一个创建于 2931 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目的

    身在帝都的人都知道租房的困难,每次找房都是心力交瘁。其中豆瓣租房小组算是比较靠谱的房源了,但是由于小组信息繁杂,而且没有搜索的功能,想要实时获取租房信息是件很困难的事情,所以最近给自己挖了个坑,做个微信找房机器人,先看大概效果吧,见下图:

    WechatIMG5

    实现

    说下大概的技术实现吧,首先是 scrapy 爬虫对于豆瓣北京租房的小组实时爬取,存储在 mongodb 中,因为做的是全文检索,所以对 title, description 使用 jieba 和 whoosh 进行了分词和索引,做成 api 。接下来就是应用的接入,网上有微信机器人的开源 wxBot,所以对它进行了修改, 实现了定时推送和持久化。最后顺便把公众号也做了同样的功能,支持实时租房信息搜索。

    部分代码

    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
    

    微信机器人代码自己去看原作者的吧,写的挺清晰的

    至于整个项目的代码现在还没整理完,整理完后考虑开源

    最后

    大家有兴趣的话可以试用下机器人,搜索微信号 jeeeeeffer 或者扫描二维码,当然公众号也有同样的功能,搜索 [嗅房] 就行。

    WechatIMG8

    最后建了个微信机器人找房交流群,你可以在群里面直接 @Flash 搜索房源或者一起交流技术。

    WechatIMG7

    9 条回复    2016-12-05 14:17:17 +08:00
    crytis
        1
    crytis  
       2016-11-22 00:32:37 +08:00 via iPhone
    支持一下 豆瓣上整租的不好找啊
    passion336699
        2
    passion336699  
       2016-11-22 09:12:05 +08:00
    深圳能用嘛?
    facert
        3
    facert  
    OP
       2016-11-22 10:06:40 +08:00
    @passion336699 可以用了
    facert
        4
    facert  
    OP
       2016-11-22 10:07:48 +08:00
    新增上海和深圳的房源
    crytis
        5
    crytis  
       2016-11-22 12:18:11 +08:00
    这个 wxbot 能稳定不掉线吗
    facert
        6
    facert  
    OP
       2016-11-22 12:48:10 +08:00
    @crytis 暂时还没掉过线,继续观察中
    lanry
        7
    lanry  
       2016-11-23 12:46:17 +08:00
    支持~
    param
        8
    param  
       2016-11-23 22:45:38 +08:00
    我是这么找的:

    seq 0 25 1000 | xargs -i curl 'https://www.douban.com/group/134539/discussion?start={}' | grep 光谷 | sort > guanggu.html
    ishowman
        9
    ishowman  
       2016-12-05 14:17:17 +08:00
    深圳找房也累
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   913 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:41 · PVG 05:41 · LAX 13:41 · JFK 16:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.