全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 2675|回复: 15

支持关键词订阅的Telegram优惠推送机器人(群),思路源码

[复制链接]
发表于 2019-11-26 20:47:12 | 显示全部楼层 |阅读模式
本帖最后由 爬虫部落 于 2019-11-26 21:07 编辑

关于
一个基于 TG 机器人的优惠信息推送群组 /频道,支持关键词订阅推送功能。主要用来解决优惠信息太多却不能及时发现自己真正需要的东西的问题。

优惠来源
抓取 smzdm 上面 投票数>2 and 值率>60% 的精选优惠信息
赚客吧(充钱搞了个能获取赚客吧大部分阅读权限帖子的账号)
其他线报群
特点
  • 关键词订阅提醒
  • 默认静默推送不扰民
  • 定期删除过期信息,不造成大量未读信息的心理压力

链接
  • 群组(后续抽奖活动以群成员为主): https://t.me/zzzdmgroup
  • 频道(喜欢安静的朋友可以关注频道): https://t.me/zzzdmchannel




图:

欢迎大家加群或者频道,下面说下思路和部分源码

首先是smzdm的链接抓取部分:
网站的跳转链接是做了反爬处理的,使用js生成一些加密的参数,如果正面突破的话需要先提取出来加密部分然后丢到js引擎去执行最后在带着处理好的参数去请求跳转,我js水平一般就没有再去分析加密过程,而是使用了pychrome提供了一个api接口专门提供链接转换服务,这里有几个细节
1. chrome又有现成的docker环境,不用自己搭建,稳定性的话我这边连续跑了十几天还没出问题
2. 在pychrome里面拦截掉除html和js以外的所有其他请求,这样能保证最快的加载速度
3. 在第一次捕获到目标网站后就立刻停止浏览器的请求,进一步提高速度,因为跳转链接有什么有很多步骤

部分代码如下:
  1. timeout = 10
  2. target_domains = [
  3.     'item.taobao.com', # 淘宝精选
  4.     'detail.tmall.com', # 天猫精选
  5.     'chaoshi.detail.tmall.com', # 天猫超市
  6.     'detail.tmall.hk', # 天猫国际
  7.     'item.jd.com', # 京东商品页
  8.     're.jd.com', # 京东热卖
  9.     'mobile.yangkeduo.com', # 拼多多
  10.     'traveldetail.fliggy.com', # 飞猪
  11.     'www.xiaomiyoupin.com', # 小米有品
  12.     'product.suning.com', # 苏宁易购
  13.     'pin.m.suning.com', # 苏宁拼购
  14. ]




  15.    
  16. def get_final_url(start_url, dev_url = 'http://127.0.0.1:9222'):
  17.     try:
  18.         browser = pychrome.Browser(url = dev_url)
  19.         tab = browser.new_tab()
  20.         eh = EventHandler(browser, tab)
  21.         tab.start()
  22.         tab.call_method("Fetch.enable")
  23.         tab.set_listener("Fetch.requestPaused", eh.request_paused)
  24.         tab.call_method("Page.navigate", url = start_url, _timeout = timeout)
  25.         tab.wait(timeout)
  26.     except Exception as e:
  27.         print(e)
  28.     finally:
  29.         tab.stop()
  30.         browser.close_tab(tab)
  31.     return urllib.parse.unquote(tab.final_url)

  32. # 转链
  33. def zl(start_url):
  34.     aff_url = None
  35.     try:
  36.         final_url = get_final_url(start_url, dev_url = 'http://127.0.0.1:9222')

  37.         if 'jd.com' in final_url.lower():
  38.             aff_url = jd.zl(final_url)
  39.         elif 'taobao.com' in final_url:
  40.             aff_url = tb.zl(final_url)
  41.         elif 'tmall.com' in final_url:
  42.             aff_url = tb.zl(final_url)
  43.         elif 'yangkeduo.com' in final_url:
  44.             final_url = final_url.replace('?goods_id', '&goods_id')
  45.             aff_url = pdd.zl(final_url)
  46.         else:
  47.             pass
  48.     except Exception as e:
  49.         print(e)
  50.         pass

  51.     return aff_url
复制代码


另一个核心点就是怎么匹配关键词:
开始的时候我用了全文索引发现准确性不是很好,后来用来比较简单粗暴的办法
1. 读取所有有的关键词
2. 遍历关键词是否在优惠信息的标题中出现
3. 去重给对应的tg用户推送优惠信息
这个办法在20W数据量的情况下单次处理速度在1秒左右,还是能接受的。

以上就是抓取真正优惠信息,然后匹配关键词进行推送的核心部分。
 楼主| 发表于 2019-11-26 21:11:27 | 显示全部楼层
xvm 发表于 2019-11-26 21:09
了解,张大妈那边的反扒策略变态吗

他好像用的是知道创宇的服务,算不上变态,只不过应该很难绕过js部分。不过他的数据量有限,使用浏览器去跑效率完全可以接受
 楼主| 发表于 2019-11-26 20:54:49 | 显示全部楼层

之前看到loc有人问怎么做支持关键词订阅的rss机器人,所有来分享下部分思路。
当然如果做通用型的支持关键词订阅的rss服务,步骤需要稍微改动下
发表于 2019-11-26 20:59:50 来自手机 | 显示全部楼层
牛叉,是已经实现了的吗?能发布出来吗?
 楼主| 发表于 2019-11-26 21:05:02 来自手机 | 显示全部楼层
xvm 发表于 2019-11-26 20:59
牛叉,是已经实现了的吗?能发布出来吗?

已经跑了10来天了,核心思路和源码已经贴在了上面,不方便贴完整源码,一是担心泛滥,二是抓取这个事情本身也不太合归
发表于 2019-11-26 21:09:37 来自手机 | 显示全部楼层
了解,张大妈那边的反扒策略变态吗
发表于 2019-11-26 21:16:50 来自手机 | 显示全部楼层
不懂,很厉害
发表于 2019-11-26 21:30:52 | 显示全部楼层
爬虫部落 发表于 2019-11-26 22:11
他好像用的是知道创宇的服务,算不上变态,只不过应该很难绕过js部分。不过他的数据量有限,使用浏览器去 ...

小红书我爬的直接把公司ip封了几天
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-3-29 22:03 , Processed in 0.070364 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表