V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
michaelym
V2EX  ›  Python

Python 是否有监听网页,发现变化然后通知的包

  •  
  •   michaelym · 2019-10-13 15:33:36 +08:00 · 6070 次点击
    这是一个创建于 1860 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前用的是爬虫,但是自己写的每隔 5 秒访问 api 有点耗流量和占内存,有什么好的办法吗,另外要同时监听多个网页( 100 个)的话有什么好方法吗?
    26 条回复    2019-10-14 15:51:18 +08:00
    dji38838c
        1
    dji38838c  
       2019-10-13 15:37:23 +08:00
    怎么可能嘛。你不访问 api,api 又不会自己发信息给你。
    vus520
        2
    vus520  
       2019-10-13 15:38:02 +08:00
    可以只读头信息,如果头信息里有页面变化的相关值,就可以省流量。
    fenghuang
        3
    fenghuang  
       2019-10-13 15:42:23 +08:00
    @vus520 #2 这样也需要请求吧,只是没处理相应消息
    lihongjie0209
        4
    lihongjie0209  
       2019-10-13 15:42:38 +08:00
    @vus520 #2 api 又不是静态文件, 使用 head 方法没有任何意义
    lihongjie0209
        5
    lihongjie0209  
       2019-10-13 15:44:29 +08:00
    可以啊, 你可以写一套复杂到调度策略, 根据统计信息经过一系列逻辑判断来决定你到请求频率和请求时间。

    当然, 在 99%的情况下, 你的时间估计比流量值钱
    malusama
        6
    malusama  
       2019-10-13 15:55:00 +08:00
    这点流量算个球啊。。
    reus
        7
    reus  
       2019-10-13 15:55:43 +08:00   ❤️ 2
    给钱让网站再更新的时候,给你发微信啊
    airyland
        8
    airyland  
       2019-10-13 15:57:14 +08:00
    付费让对方接口实现变化时 webhook 通知。
    ClericPy
        9
    ClericPy  
       2019-10-13 16:08:53 +08:00
    监听网页了都, 还不让访问么, 访问 http 就算爬虫了吧, 前段时间刚好追剧和追一拳超人漫画, 随手用写了个简单的爬虫后台, 主要目的就是把定位变化位置的部分用常规解析器+普通字符串来定位, css/Xpath/regex/Jsonpath 等等, 但是对你这种情况, 还是爬虫简单点啊, 你说的占内存费流量, 费流量看对方是否有 gzip, 不然只能通过 headers 判断了. 至于占内存, 我随手弄的协程爬虫百并发也没用多少内存, 你是不是姿势有问题, 不过高并发下 cpu 飙起来是挺正常的
    michaelym
        10
    michaelym  
    OP
       2019-10-13 16:11:13 +08:00
    @dji38838c
    @malusama
    @lihongjie0209
    @reus
    @malusama
    主要是如果页面一多,这样每间隔 5 秒其实访问量也挺厉害的
    cyrbuzz
        11
    cyrbuzz  
       2019-10-13 16:12:47 +08:00   ❤️ 1
    找 xss 插入 js。
    redeemer1001
        12
    redeemer1001  
       2019-10-13 16:18:21 +08:00
    @cyrbuzz 这是杀鸡用牛刀啊[哭笑]
    michaelym
        13
    michaelym  
    OP
       2019-10-13 16:20:16 +08:00
    @ClericPy
    @vus520
    header 里面没有 length 信息,也没有其他可以看到变化的值
    ClericPy
        14
    ClericPy  
       2019-10-13 16:45:14 +08:00
    @michaelym 所以没有任何实例, 场景, 靠猜怎么猜啊, 稍微像个 PM 一样提问题会省很多时间, 划水的时间也很宝贵的
    1. 100 网页什么样的, 能提供什么例子
    2. 100 网页或 api 是自己家的还是别人家的, 是同域名的还是很多域名的
    3. 100 网页是有没有内网接口
    4. 理想状态的多少访问频率不算敲打服务器, 5 秒 100 次是打到同一个服务器上吗, 每秒 20 次对于一般服务器来说不至于 DOS 但可能会触发防火墙封掉 IP
    5. 就流量来说要尽可能少还是说节省 IO 开销就好
    6. 这些网站有没有修改权限的, 或者联系到对方开发者留个观察者目标
    7. 实时性要求就是严格 5 秒吗
    densuc
        15
    densuc  
       2019-10-13 17:22:30 +08:00
    了解一下 huginn ?
    cyrbuzz
        16
    cyrbuzz  
       2019-10-13 18:19:45 +08:00
    @redeemer1001
    23333,真找到了很省事。
    iamxiaoq
        17
    iamxiaoq  
       2019-10-13 21:12:45 +08:00 via Android
    网页还是 api ?哪种网页?支持 head 方法?
    SingeeKing
        18
    SingeeKing  
       2019-10-13 21:25:57 +08:00
    楼主需要的应该不是包而是服务吧,毕竟如果要求本地不请求还能知道网页变没变只有外部主动通知才可能

    可以考虑
    https://versionista.com/
    https://fluxguard.com/
    https://www.sken.io/
    forgottencoast
        19
    forgottencoast  
       2019-10-13 21:27:56 +08:00
    @lihongjie0209 HEAD 在实现良好的 RESTful 风格 Api 里面是很有用的。
    lihongjie0209
        20
    lihongjie0209  
       2019-10-13 21:42:02 +08:00
    @forgottencoast #19

    1. 按照楼主的提问, 那么肯定是从 http 协议层面考虑, 至于 api 是不是 rest 风格的,没法确定, 没法保证, 没法修改。
    2. 其次, 我是没看懂为什么一个动态资源( api )需要实现 head 方法。

    按照 mdn 和 rfc2616 的说法,head 方法就是一个 get 方法不返回 body, 主要到作用也是解决带宽和缓存处理。

    `实现良好的 RESTful 风格 Api ` 可有任何实际的项目在使用?麻烦发一下 github 地址。

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/HEAD
    ```
    HTTP HEAD 方法 请求资源的头部信息, 并且这些头部与 HTTP GET 方法请求时返回的一致. 该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此可以节约带宽资源.
    ```

    rfc2616

    ```
    9.4 HEAD
    The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the entity implied by the request without transferring the entity-body itself. This method is often used for testing hypertext links for validity, accessibility, and recent modification.

    The response to a HEAD request MAY be cacheable in the sense that the information contained in the response MAY be used to update a previously cached entity from that resource. If the new field values indicate that the cached entity differs from the current entity (as would be indicated by a change in Content-Length, Content-MD5, ETag or Last-Modified), then the cache MUST treat the cache entry as stale.

    ```
    0312birdzhang
        21
    0312birdzhang  
       2019-10-13 22:08:00 +08:00
    你要的是不是 Etag 或者 Last-Modified ?
    xiangyuecn
        22
    xiangyuecn  
       2019-10-13 23:20:23 +08:00
    占内存就像是一个笑话。。。感觉你是在提前优化😎 阔怕

    如果确实发百来个请求就占用了大量内存(写了什么代码😂),实在要优化,花 100 块买根 1G 的条子加上去难道不香吗,实在不行买 128G 的也行😂

    量多占用太多流量这个看楼主#13 说的似乎很难优化,不过量多往往代表着普普通通很长时间不太可能变化,意思就是代表着时效性没有想象的这么高,给这些按重要性分一下级,90%不重要的也许 5 秒改成 500 秒就好了,来 1000 个改成 5000 秒,以此类推😂
    ty89
        23
    ty89  
       2019-10-14 10:17:22 +08:00
    爬虫是放在在非洲用 2G 上网的,流量这么金贵
    cominghome
        24
    cominghome  
       2019-10-14 12:19:29 +08:00
    “但是自己写的每隔 5 秒访问 api 有点耗流量和占内存”被你爬的公司还没说话呢... 2333
    ztcaoll222
        25
    ztcaoll222  
       2019-10-14 12:53:51 +08:00
    "有点耗流量和占内存", 你是用手机跑爬虫的吗
    imaimin
        26
    imaimin  
       2019-10-14 15:51:18 +08:00
    楼主这应该是在监听 KJ 结果
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2537 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:16 · PVG 09:16 · LAX 17:16 · JFK 20:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.