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

我在用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

学习是最好的投资!

membalas semua(3)
黄舟

Http Last-Modified


1) Apakah itu "Terakhir Diubah Suai"
Apabila penyemak imbas meminta URL buat kali pertama, status pemulangan daripada pelayan ialah 200, kandungannya ialah sumber yang anda minta, dan ada ialah Atribut Last The -Modified menandakan masa fail ini terakhir diubah suai pada pelayan Formatnya adalah serupa dengan ini:
Last-Modified: Jum, 12 Mei 2006 18:53:33 GMT Apabila klien meminta ini. URL untuk kali kedua, menurut Menurut peruntukan protokol HTTP
, penyemak imbas akan menghantar pengepala If-Modified-Since ke pelayan untuk bertanya sama ada fail telah diubah suai selepas masa ini:
 If -Diubahsuai-Sejak: Jum, 12 Mei 2006 18:53: 33 GMT
 Jika sumber bahagian pelayan tidak berubah, kod status HTTP 304 (Tidak
Diubah.) akan dikembalikan secara automatik dengan kandungan kosong, sekali gus menjimatkan jumlah data yang akan dihantar. Apabila kod bahagian pelayan berubah atau pelayan dimulakan semula, sumber dikeluarkan semula dan pulangan adalah serupa dengan permintaan pertama. Ini memastikan bahawa sumber tidak dihantar kepada pelanggan berulang kali, dan juga memastikan bahawa apabila pelayan berubah, pelanggan boleh mendapatkan sumber terkini.


pengepala 'If-Modified-Since'

Kod Status:304 Tidak Diubah Suai

Kod status 304 bermakna halaman itu belum ditukar

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

Masa ditukar kepada semalam (ke-4)

Pelayan mengembalikan kod status 200

dan terdapat 'Last-Modified': 'Sun, 05 Feb 2017 06:00:03 GMT'

menunjukkan masa pengubahsuaian terakhir.

>>> 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'}
>>> 
伊谢尔伦

Walau apa pun, anda perlu melawati tapak sumber untuk mendapatkan data Jika anda tidak menangkap data, bagaimana anda tahu jika terdapat perubahan?

大家讲道理

Kemas kini jenis ini mungkin dikemas kini menggunakan ajax Secara peribadi, saya fikir anda boleh melihat kod js tapak web untuk mencari URL dan parameter permintaan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan