Cookie: vertx-web.session是什么

在学习爬虫中用浏览器抓取cookie,但浏览器抓取到的cookie是:Cookie: vertx-web.session=4c76adcf91d680bf845ea62d94d693b7,这个cookie带入下面程序无法爬取网页:

import requests

url ='http://192.168.237.17:8080/#/application-runtime/Page_b4411986083149758d99ff5c93c6b1d7'

# 构造请求头字典
headers = {
    # 从浏览器中复制过来的User-Agent
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36',
    # 从浏览器中复制过来的Cookie
    'cookie': "vertx-web.session=4c76adcf91d680bf845ea62d94d693b7"}

resp = requests.get(url, headers=headers)
print(resp.text)

面对这种情况如何实现页面爬取,请指教!

img

该回答引用ChatGPT

如果有疑问可以回复我

在抓取到的Cookie中,可能包含了浏览器会话中的会话ID,这个会话ID是有时效性的,也就是说当浏览器关闭或者该会话过期后,该Cookie就会失效。

因此,可以尝试以下几种方法解决这个问题:

1、刷新Cookie
使用浏览器打开该网站,登录后抓取Cookie,将Cookie复制到代码中,再试着访问该网站,如果还是无法访问,就尝试刷新Cookie,重新获取Cookie,更新到代码中,再次尝试访问该网站。

2、通过登录接口获取Cookie
有些网站提供了登录接口,通过该接口可以获取到登录后的Cookie,这样就可以直接使用这个Cookie进行页面爬取。需要注意的是,不同的网站登录方式可能不同,因此需要根据具体的网站进行调整。

3、使用selenium自动化测试工具
如果以上两种方法都无法解决问题,可以考虑使用selenium自动化测试工具,该工具可以模拟浏览器行为,登录网站,抓取Cookie,并使用该Cookie进行页面爬取。

该代码中,首先设置了Chrome浏览器的无头模式,然后启动Chrome浏览器,访问目标网站,添加Cookie,刷新页面,输出页面内容,最后关闭浏览器。通过这样的方式,就可以使用浏览器中抓取到的Cookie进行页面爬取。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

# 设置Chrome浏览器无头模式
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')

# 启动Chrome浏览器
browser = webdriver.Chrome(options=chrome_options)

# 设置访问的URL和Cookie
url ='http://192.168.237.17:8080/#/application-runtime/Page_b4411986083149758d99ff5c93c6b1d7'
cookie = {'name': 'vertx-web.session', 'value': '4c76adcf91d680bf845ea62d94d693b7'}

# 访问网站
browser.get(url)
time.sleep(5)

# 添加Cookie
browser.add_cookie(cookie)

# 刷新页面
browser.refresh()
time.sleep(5)

# 输出页面内容
print(browser.page_source)

# 关闭浏览器
browser.quit()


你这是局域网地址,没法测试,不知道你遇到的问题是什么

cookie是存在请求头部的(Httpservletrequest),
若是该网站需要登录,你要注意这个cookie是否为登录之后的cookie(有的cookie在登录网页也有),只有登录后的cooike才可以获取数据。
request.setHeader(cookie,cookie值),注意是key-value形式。

vertx-web.session 是一个用于创建和管理 Web 会话(session)的模块。Vert.x 是一个基于 JVM 的开源工具包,用于编写异步、事件驱动的应用程序。vertx-web.session 模块是 Vert.x Web 工具包的一部分,用于创建和管理基于 Web 的会话。

Web 会话是指在 Web 应用程序中,客户端和服务器之间的交互过程中保留的状态信息。例如,用户登录到网站后,可以将其用户名存储在会话中,以便在用户在浏览器上浏览站点的不同页面时,可以保持其登录状态。

vertx-web.session 模块提供了不同的会话存储后端(如内存、Redis、Couchbase 等)以及不同的会话 ID 生成算法。它还提供了一组工具类,用于处理会话的创建、销毁、更新等操作,并且可以与 Vert.x Web 路由器和处理程序一起使用,以便在 Web 应用程序中实现基于会话的功能。

参考GPT和自己的思路,vertx-web.session 是一个 Web 应用程序框架 Vert.x 的会话管理模块(Session Management Module),用于跟踪用户在 Web 应用程序中的状态。该 Cookie 记录了用户的会话 ID,可以通过它来找到用户在服务器端存储的会话状态。在爬虫中,需要使用该 Cookie 来模拟用户的登录状态,以访问需要登录才能访问的页面。

针对你的代码,如果你无法爬取网页,可能是因为请求头不正确。下面是一个简单的爬虫示例代码,演示如何在请求头中加入 Cookie,以模拟已登录的状态访问页面:

import requests

url = 'http://192.168.237.17:8080/#/application-runtime/Page_b4411986083149758d99ff5c93c6b1d7'

# 构造请求头字典,包含 Cookie
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36',
    'Cookie': 'vertx-web.session=4c76adcf91d680bf845ea62d94d693b7'
}

# 发送 GET 请求
response = requests.get(url, headers=headers)

# 打印响应内容
print(response.text)

请注意,Cookie 中的值是临时的,可能会过期或者在用户注销登录之后失效。在实际使用中,你需要通过程序登录并获取到最新的 Cookie 值,再使用该值来访问需要登录才能访问的页面。

漏参数了吧,你下载SRSniffer抓包对比一下

我建议您可以尝试使用 requests 库中的 Session 功能来实现,这样就可以为每个 URL 请求自动发送 cookie 了。步骤如下:

  1. 使用 requests.Session() 创建一个会话对象。
  2. 调用会话对象的 get() 方法以向服务器发送 GET 请求,并携带cookie参数: session.get(url, cookies = {‘vertx-web.session’: ‘4c76adcf91d680bf845ea62d94d693b7’})
  3. 调用response的text方法来获取HTML文本:resp.text

您可以使用BeautifulSoup库来解析HTML文本,这样就可以实现对页面内容的爬取了。例如:from bs4 import BeautifulSoup soup = BeautifulSoup(resp.text, ‘html.parser’) print(soup.title.string) #获取页面的标题。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,vertx-web.session 是一个网站使用的 session id。只拿这个 cookie 并不能直接访问网页,还需要其他的 cookies 和请求头,例如认证 cookie、用户信息 cookie 等。通常,这些 cookies 和请求头是在登录网站时由服务器返回的。

另外,根据您提供的代码,我们无法得知爬取网站所需的其他 cookies 和请求头信息。但您可以尝试以下两种方法:

  1. 手动登录网站获取完整的 cookies 和请求头,在代码中全部添加,例如:
import requests

url ='http://192.168.237.17:8080/#/application-runtime/Page_b4411986083149758d99ff5c93c6b1d7'

# 构造请求头字典,包含所有 cookies 和请求头信息
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36',
    'cookie': '认证 cookie; 用户信息 cookie; vertx-web.session=4c76adcf91d680bf845ea62d94d693b7',
    '其他请求头': '其他请求头信息'}

resp = requests.get(url, headers=headers)
print(resp.text)
  1. 使用 requests.Session() 对象保留登录网站时返回的所有 cookies 和请求头信息,然后在后续的访问中使用,例如:

```python
import requests

url ='http://192.168.237.17:8080/#/application-runtime/Page_b4411986083149758d99ff5c93c6b1d7'

构造请求头字典,只包含部分信息

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}

构造 Session 对象,保存所有 cookies 和请求头信息

session = requests.Session()
session.headers.update(headers)
session.cookies.update({'认证 cookie': '认证cookie_value'})
session.cookies.update({'用户信息 cookie': '用户信息cookie_value'})
session.cookies.update({'vertx-web.session': '4c76adcf91d680bf845ea62d94d693b7'})

访问网站

resp = session.get(url)
print(resp.text)
``

在你的情况中,需要将Cookie的名称和值作为字典添加到headers中。例如:

import requests

url ='http://192.168.237.17:8080/#/application-runtime/Page_b4411986083149758d99ff5c93c6b1d7'

# 构造请求头字典
headers = {
    # 从浏览器中复制过来的User-Agent
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36',
    # 添加Cookie信息
    'Cookie': 'vertx-web.session=4c76adcf91d680bf845ea62d94d693b7'
}

resp = requests.get(url, headers=headers)
print(resp.text)

该回答引用GPTᴼᴾᴱᴺᴬᴵ
vertx-web.session 是 Vert.x Web 框架的会话管理机制中使用的 cookie。Vert.x 是一款基于 JVM 的异步事件驱动的轻量级框架,能够轻松构建高性能、高可靠性的应用程序,其中 Vert.x Web 是 Vert.x 的 Web 框架,用于构建 Web 应用程序。

在你的代码中,你需要注意一下请求的 URL,似乎是一个 Angular 前端应用程序的 URL,并不是一个可爬取的实际网页 URL,可能需要根据实际情况进行修改。如果还是无法爬取,可以考虑查看请求响应状态码和响应报文,以便更好地定位问题所在。

以下答案基于ChatGPT与GISer Liu编写:

根据你提供的信息,似乎你需要先了解一下cookie的相关知识和网站的登录认证机制。Cookie是一种用于跟踪网站用户身份的技术,它通过在用户的浏览器中存储一些数据来记录用户的登录状态等信息,以便用户在之后的访问中可以免登录访问网站。而有些网站为了保护用户的信息,会对访问者进行认证,如要求用户登录才能访问一些页面。

  • 在你提供的代码中,你只是带上了Cookie请求头来访问网页,但没有提供有效的登录凭证,如果网站对于未认证的用户不允许访问该页面,则会返回错误或者跳转到登录页面。因此,你需要先确保自己已经成功登录网站,并且获取到了有效的认证凭证才能顺利访问该页面。

  • 另外,你提到的这个Cookie名为"vertx-web.session",它可能是某个框架或者库使用的Session ID,它只是用户登录状态的一部分,如果你只是将这个Cookie带上,而没有提供有效的登录凭证,那么访问该页面仍然会被视为未登录状态。

  • 因此,你需要先了解该网站的登录认证机制,然后使用相应的方法进行登录并获取有效的认证凭证,最后将这些凭证一并带上请求头再进行访问该页面。具体方法可以根据网站的具体情况而定。