溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

利用Python實(shí)現(xiàn)微信找房機(jī)器人實(shí)例教程

發(fā)布時(shí)間:2020-08-21 20:07:15 來(lái)源:腳本之家 閱讀:113 作者:facert 欄目:開(kāi)發(fā)技術(shù)

目的

兩年前曾為了租房做過(guò)一個(gè)找房機(jī)器人 「爬取豆瓣租房并定時(shí)推送到微信」,維護(hù)一段時(shí)間后就荒廢了。

當(dāng)時(shí)因?yàn)榇a比較簡(jiǎn)單一直沒(méi)開(kāi)源,現(xiàn)在想想說(shuō)不定開(kāi)源后也能幫助一些同學(xué)更好的找到租房信息,所以簡(jiǎn)單整理后,開(kāi)源到 github,地址:https://github.com/facert/zufang (本地下載)

下面是當(dāng)時(shí)寫的簡(jiǎn)單原理介紹:

身在帝都的人都知道租房的困難,每次找房都是心力交瘁。其中豆瓣租房小組算是比較靠譜的房源了,但是由于小組信息繁雜,而且沒(méi)有搜索的功能,想要實(shí)時(shí)獲取租房信息是件很困難的事情,所以最近給自己挖了個(gè)坑,做個(gè)微信找房機(jī)器人,先看大概效果吧,見(jiàn)下圖:

利用Python實(shí)現(xiàn)微信找房機(jī)器人實(shí)例教程

利用Python實(shí)現(xiàn)微信找房機(jī)器人實(shí)例教程

實(shí)現(xiàn)

說(shuō)下大概的技術(shù)實(shí)現(xiàn)吧,首先是 scrapy 爬蟲(chóng)對(duì)于豆瓣北京租房的小組實(shí)時(shí)爬取,并做了全文檢索,對(duì) title, description 使用 jieba 和 whoosh 進(jìn)行了分詞和索引,做成 api。接下來(lái)就是應(yīng)用的接入,網(wǎng)上有微信機(jī)器人的開(kāi)源 [wxBot](http://github.com/liuwons/wxBo),所以對(duì)它進(jìn)行了修改, 實(shí)現(xiàn)了定時(shí)推送和持久化。最后順便把公眾號(hào)也做了同樣的功能,支持實(shí)時(shí)租房信息搜索。

部分代碼

scrapy 支持自定義 pipeline,能很方便的實(shí)現(xiàn)數(shù)據(jù)錄入的時(shí)候?qū)崟r(shí)生成索引,見(jiàn) 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 代碼很簡(jiǎn)單:

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI