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

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

当然, 在 99%的情况下, 你的时间估计比流量值钱
malusama
2019-10-13 15:55:00 +08:00
这点流量算个球啊。。
reus
2019-10-13 15:55:43 +08:00
给钱让网站再更新的时候,给你发微信啊
airyland
2019-10-13 15:57:14 +08:00
付费让对方接口实现变化时 webhook 通知。
ClericPy
2019-10-13 16:08:53 +08:00
监听网页了都, 还不让访问么, 访问 http 就算爬虫了吧, 前段时间刚好追剧和追一拳超人漫画, 随手用写了个简单的爬虫后台, 主要目的就是把定位变化位置的部分用常规解析器+普通字符串来定位, css/Xpath/regex/Jsonpath 等等, 但是对你这种情况, 还是爬虫简单点啊, 你说的占内存费流量, 费流量看对方是否有 gzip, 不然只能通过 headers 判断了. 至于占内存, 我随手弄的协程爬虫百并发也没用多少内存, 你是不是姿势有问题, 不过高并发下 cpu 飙起来是挺正常的
michaelym
2019-10-13 16:11:13 +08:00
@dji38838c
@malusama
@lihongjie0209
@reus
@malusama
主要是如果页面一多,这样每间隔 5 秒其实访问量也挺厉害的
cyrbuzz
2019-10-13 16:12:47 +08:00
找 xss 插入 js。
redeemer1001
2019-10-13 16:18:21 +08:00
@cyrbuzz 这是杀鸡用牛刀啊[哭笑]
michaelym
2019-10-13 16:20:16 +08:00
@ClericPy
@vus520
header 里面没有 length 信息,也没有其他可以看到变化的值
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
2019-10-13 17:22:30 +08:00
了解一下 huginn ?
cyrbuzz
2019-10-13 18:19:45 +08:00
@redeemer1001
23333,真找到了很省事。
iamxiaoq
2019-10-13 21:12:45 +08:00
网页还是 api ?哪种网页?支持 head 方法?
SingeeKing
2019-10-13 21:25:57 +08:00
楼主需要的应该不是包而是服务吧,毕竟如果要求本地不请求还能知道网页变没变只有外部主动通知才可能

可以考虑
https://versionista.com/
https://fluxguard.com/
https://www.sken.io/
forgottencoast
2019-10-13 21:27:56 +08:00
@lihongjie0209 HEAD 在实现良好的 RESTful 风格 Api 里面是很有用的。
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.

```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/608862

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX