python - 如何不刷新网页而监控网页变化?
PHPz
PHPz 2017-04-18 10:17:02
0
3
952

我在用python监控一个网页 这个网页不定时的会更新 我要寻找需要匹配的关键词比如‘ABC’ 大概的程序框架如下
基本方法就是 用 selenium 获取源码 然后beautifulsoup解析 然后再去结果里面match 每2秒循环一次

while true:
    html = browser.page_source
    soup = BeautifulSoup(html)
    abc=soup.find_all(text=re.compile("(ABC)"))    
    if not abc:
         .....
    else:
         .....   
    browser.refresh()
    time.sleep(2.0 - ((time.time() - starttime) % 2.0))

现在问题就是这个程序很依赖网速,browser.refresh() 刷新一次有可能就会用1秒钟
有没有什么办法 不需要刷新网页 就能知道网页有变化
或者有没有其他办法能让我这个程序 不被网速拖累

PHPz
PHPz

学习是最好的投资!

répondre à tous(3)
黄舟

Http Last-Modified


1) Qu'est-ce que « Dernière modification » ?
Lorsque le navigateur demande une URL pour la première fois, le statut de retour du serveur sera 200, le contenu est la ressource que vous avez demandée, et là est un Last L'attribut -Modified marque l'heure à laquelle ce fichier a été modifié pour la dernière fois sur le serveur. Le format est similaire à celui-ci :
Last-Modified : Fri, 12 May 2006 18:53:33 GMT Lorsque le client le demande. URL pour la deuxième fois, selon Selon les dispositions du protocole HTTP
, le navigateur enverra l'en-tête If-Modified-Since au serveur pour demander si le fichier a été modifié passé ce délai :
 If -Modifié-Depuis : vendredi 12 mai 2006 18h53 : 33 GMT
 Si les ressources côté serveur n'ont pas changé, le code d'état HTTP 304 (Not
Changed.) sera automatiquement renvoyé avec un contenu vide, économisant ainsi la quantité de données à transmettre. Lorsque le code côté serveur change ou que le serveur est redémarré, la ressource est réémise et le retour est similaire à la première requête. Cela garantit que les ressources ne sont pas envoyées au client à plusieurs reprises et garantit également que lorsque le serveur change, le client peut obtenir les dernières ressources.


en-têtes 'If-Modified-Since'

Code d'état : 304 non modifié

Le code d'état 304 signifie que la page n'a pas été modifiée

>>> import requests as req
>>> url='http://www.guancha.cn/'
>>> rsp=req.head(url,headers={'If-Modified-Since':'Sun, 05 Feb 2017 05:39:11 GMT'})
>>> rsp
<Response [304]>
>>> rsp.headers
{'Server': 'NWS_TCloud_S1', 'Content-Type': 'text/html', 'Date': 'Sun, 05 Feb 2017 05:45:20 GMT', 'Cache-Control': 'max-age=60', 'Expires': 'Sun, 05 Feb 2017 05:46:20 GMT', 'Content-Length': '0', 'Connection': 'keep-alive'}

L'heure a été changée pour hier (4)

Le serveur renvoie le code d'état 200

et il y a 'Last-Modified': 'Sun, 05 Feb 2017 06:00:03 GMT'

indique l'heure de la dernière modification.

>>> hds={'If-Modified-Since':'Sat, 04 Feb 2017 05:39:11 GMT'} # 时间改为 昨天(4号)
>>> rsp=req.head(url,headers=hds)
>>> rsp
<Response [200]>
>>> rsp.headers
{'Last-Modified': 'Sun, 05 Feb 2017 06:00:03 GMT', 'Date': 'Sun, 05 Feb 2017 06:04:59 GMT', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'X-Daa-Tunnel': 'hop_count=2', 'X-Cache-Lookup': 'Hit From Disktank3 Gz, Hit From Inner Cluster, Hit From Upstream', 'Server': 'nws_ocmid_hy', 'Content-Type': 'text/html', 'Expires': 'Sun, 05 Feb 2017 06:05:59 GMT', 'Cache-Control': 'max-age=60', 'Content-Length': '62608'}
>>> 
伊谢尔伦

Quoi qu'il en soit, vous devez visiter le site source pour obtenir les données. Si vous ne capturez pas les données, comment saurez-vous s'il y a des changements ?

大家讲道理

Ce type de mise à jour peut être mis à jour en utilisant ajax. Personnellement, je pense que vous pouvez regarder le code js du site pour trouver l'URL et les paramètres de la requête. Si possible, accéder directement à la requête ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal