首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
宝塔
V2EX  ›  Python

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

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

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

    可以考虑
    https://versionista.com/
    https://fluxguard.com/
    https://www.sken.io/
        19
    forgottencoast   40 天前
    @lihongjie0209 HEAD 在实现良好的 RESTful 风格 Api 里面是很有用的。
        20
    lihongjie0209   40 天前
    @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.

    ```
        21
    0312birdzhang   40 天前
    你要的是不是 Etag 或者 Last-Modified ?
        22
    xiangyuecn   40 天前
    占内存就像是一个笑话。。。感觉你是在提前优化😎 阔怕

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

    量多占用太多流量这个看楼主#13 说的似乎很难优化,不过量多往往代表着普普通通很长时间不太可能变化,意思就是代表着时效性没有想象的这么高,给这些按重要性分一下级,90%不重要的也许 5 秒改成 500 秒就好了,来 1000 个改成 5000 秒,以此类推😂
        23
    ty89   39 天前
    爬虫是放在在非洲用 2G 上网的,流量这么金贵
        24
    cominghome   39 天前
    “但是自己写的每隔 5 秒访问 api 有点耗流量和占内存”被你爬的公司还没说话呢... 2333
        25
    ztcaoll222   39 天前
    "有点耗流量和占内存", 你是用手机跑爬虫的吗
        26
    imaimin   39 天前
    楼主这应该是在监听 KJ 结果
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   913 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 44ms · UTC 22:41 · PVG 06:41 · LAX 14:41 · JFK 17:41
    ♥ Do have faith in what you're doing.