1

我正在尝试监视页面是否有任何更新。但是,我需要保持相同的会话和 cookie,所以我不能只发送一个全新的请求。

如何在当前请求中检查 HTML 中的更新?页面不仅会更新,还会重定向,但 URL 保持不变。

这是我当前的代码:

import requests

url = 'xxx'

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
}

response = requests.get(url, headers=headers, allow_redirects=True, config={'keep_alive': True})


def get_status():
    html = response.text # this should be the current HTML, not the HTML when I made the initial request
    if x in html:
        status = "exists"
    else:
        status = "null"

return status


print(get_status())

编辑:我将使用 while 循环每 5 秒运行一次此函数,以检查状态是否为 =“存在”。

EDIT2:我尝试通过 requests_html 实现它,但我没有得到应有的 cookie:

import requests_html
from requests_html import HTMLSession

session = HTMLSession()
session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'})
r = session.get('x')
r.html.render(reload=False)
print(r.cookies.get_dict())
4

1 回答 1

0

但是,我需要保持相同的会话和 cookie,所以我不能只发送一个全新的请求。

您在这里要做的是使用

s = requests.Session()
response = s.get("http://www.google.com")

这将确保跨请求保留 cookie 和某些其他内容。导航到Sessions 的文档以获取更多详细信息。

由于您只是想检查返回的 html 是否与前一个请求中的完全相同,只需将第一个保存response.text在您的函数之外并检查您的 new 是否response.text等于之前保存的那个。

如果网站动态显示任何内容,这当然不能解决问题,但如果您可以检查 DOM 中的特定元素并将其与上一个请求中的对象进行比较,这将正常工作。

于 2018-04-17T15:22:53.420 回答