设为首页收藏本站

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 74|回复: 14

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

[复制链接]

5

主题

94

回帖

225

积分

中级会员

积分
225
发表于 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. 在第一次捕获到目标网站后就立刻停止浏览器的请求,进一步提高速度,因为跳转链接有什么有很多步骤

    部分代码如下:
    [ol]
  • timeout = 10
  • target_domains = [
  •     'item.taobao.com', # 淘宝精选
  •     'detail.tmall.com', # 天猫精选
  •     'chaoshi.detail.tmall.com', # 天猫超市
  •     'detail.tmall.hk', # 天猫国际
  •     'item.jd.com', # 京东商品页
  •     're.jd.com', # 京东热卖
  •     'mobile.yangkeduo.com', # 拼多多
  •     'traveldetail.fliggy.com', # 飞猪
  •     'www.xiaomiyoupin.com', # 小米有品
  •     'product.suning.com', # 苏宁易购
  •     'pin.m.suning.com', # 苏宁拼购
  • ]
  •    
  • def get_final_url(start_url, dev_url = 'http://127.0.0.1:9222'):
  •     try:
  •         browser = pychrome.Browser(url = dev_url)
  •         tab = browser.new_tab()
  •         eh = EventHandler(browser, tab)
  •         tab.start()
  •         tab.call_method("Fetch.enable")
  •         tab.set_listener("Fetch.requestPaused", eh.request_paused)
  •         tab.call_method("Page.navigate", url = start_url, _timeout = timeout)
  •         tab.wait(timeout)
  •     except Exception as e:
  •         print(e)
  •     finally:
  •         tab.stop()
  •         browser.close_tab(tab)
  •     return urllib.parse.unquote(tab.final_url)
  • # 转链
  • def zl(start_url):
  •     aff_url = None
  •     try:
  •         final_url = get_final_url(start_url, dev_url = 'http://127.0.0.1:9222')
  •         if 'jd.com' in final_url.lower():
  •             aff_url = jd.zl(final_url)
  •         elif 'taobao.com' in final_url:
  •             aff_url = tb.zl(final_url)
  •         elif 'tmall.com' in final_url:
  •             aff_url = tb.zl(final_url)
  •         elif 'yangkeduo.com' in final_url:
  •             final_url = final_url.replace('?goods_id', '&goods_id')
  •             aff_url = pdd.zl(final_url)
  •         else:
  •             pass
  •     except Exception as e:
  •         print(e)
  •         pass
  •     return aff_url[/ol]复制代码

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

    以上就是抓取真正优惠信息,然后匹配关键词进行推送的核心部分。
  • 本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    回复

    使用道具 举报

    5

    主题

    94

    回帖

    225

    积分

    中级会员

    积分
    225
     楼主| 发表于 2019-11-26 21:11:27 | 显示全部楼层

    xvm 发表于 2019-11-26 21:09

    了解,张大妈那边的反扒策略变态吗

    他好像用的是知道创宇的服务,算不上变态,只不过应该很难绕过js部分。不过他的数据量有限,使用浏览器去跑效率完全可以接受
    回复

    使用道具 举报

    24

    主题

    279

    回帖

    664

    积分

    高级会员

    积分
    664
    发表于 2019-11-26 21:09:00 | 显示全部楼层
    大佬 厉害


    回复

    使用道具 举报

    3

    主题

    57

    回帖

    135

    积分

    注册会员

    积分
    135
    发表于 2019-11-26 20:52:35 | 显示全部楼层
    膜拜大佬
    回复

    使用道具 举报

    5

    主题

    94

    回帖

    225

    积分

    中级会员

    积分
    225
     楼主| 发表于 2019-11-26 20:54:20 | 显示全部楼层

    ncnc 发表于 2019-11-26 20:52

    大佬 厉害

    之前看到loc有人问怎么做支持关键词订阅的rss机器人,所有来分享下部分思路。
    当然如果做通用型的支持关键词订阅的rss服务,步骤需要稍微改动下
    回复

    使用道具 举报

    11

    主题

    440

    回帖

    943

    积分

    高级会员

    积分
    943
    发表于 2019-11-26 20:54:49 | 显示全部楼层
    牛叉,是已经实现了的吗?能发布出来吗?
    回复

    使用道具 举报

    5

    主题

    94

    回帖

    225

    积分

    中级会员

    积分
    225
     楼主| 发表于 2019-11-26 20:52:00 | 显示全部楼层
    "

    已经跑了10来天了,核心思路和源码已经贴在了上面,不方便贴完整源码,一是担心泛滥,二是抓取这个事情本身也不太合归
    回复

    使用道具 举报

    11

    主题

    440

    回帖

    943

    积分

    高级会员

    积分
    943
    发表于 2019-11-26 20:59:50 | 显示全部楼层
    了解,张大妈那边的反扒策略变态吗
    回复

    使用道具 举报

    63

    主题

    1048

    回帖

    2357

    积分

    金牌会员

    积分
    2357
    发表于 2019-11-26 21:05:02 | 显示全部楼层
    不懂,很厉害
    回复

    使用道具 举报

    112

    主题

    442

    回帖

    1304

    积分

    金牌会员

    积分
    1304
    发表于 2019-11-26 20:59:00 | 显示全部楼层

    爬虫部落 发表于 2019-11-26 22:11

    他好像用的是知道创宇的服务,算不上变态,只不过应该很难绕过js部分。不过他的数据量有限,使用浏览器去 ...

    小红书我爬的直接把公司ip封了几天
    pulpfunction 发表于 2019-11-26 21:30

    小红书我爬的直接把公司ip封了几天

    动态ip爬虫必备,哈哈

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|Discuz! X

    GMT+8, 2025-12-19 00:59 , Processed in 0.022244 second(s), 4 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

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