recherche

Maison  >  Questions et réponses  >  le corps du texte

python - 如何不刷新网页而监控网页变化?

我在用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秒钟
有没有什么办法 不需要刷新网页 就能知道网页有变化
或者有没有其他办法能让我这个程序 不被网速拖累

PHPzPHPz2803 Il y a quelques jours945

répondre à tous(3)je répondrai

  • 黄舟

    黄舟2017-04-18 10:19:02

    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'}
    >>> 

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:19:02

    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 ?

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:19:02

    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 ?

    répondre
    0
  • Annulerrépondre