吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 710|回复: 13
收起左侧

[求助] 关于cookie请教个问题

[复制链接]
kognzhezhi 发表于 2023-10-15 09:43
本帖最后由 kognzhezhi 于 2023-10-16 09:20 编辑

问题:最近在练习python,在爬取某一页信息时需要设置cookie,但是每次都是手动输入的,感觉很麻烦,然后想到让程序自己提取cookie 再使用。但是提取的cookie 不能使用(提取的cookie爬取不到信息,自己从网页复制的就可以)
麻烦大家帮我看一下 哪里出了问题,下面是提取cookie的代码

[Python] 纯文本查看 复制代码
url_search = ''
res = requests.get(url_search)
cookiejar = res.cookies
cookie = requests.utils.dict_from_cookiejar(cookiejar)



这是网页复制的cookie  'JSESSIONID=77296348A2CEF825BE2CC44D94E98883; uvid=1881565932_1691460962_67; Hm_lvt_a8fda29303267d5a0517d9573ac30d91=1691460963; HWWAFSESID=f9dd19d0384152e98f; HWWAFSESTIME=1697333366569'
这是爬取的cookie        '{'HWWAFSESID': '88ffb7fce2f66ca27b', 'HWWAFSESTIME': '1697334176861', 'JSESSIONID': 'EB96A9AC5F3A12EA14681D237667926D'}'

我也试着把他们格式弄得一样  还是不能用,请教哪里有问题

今天又换了个电脑试了试
这是网页上的cookie

Cookie:

JSESSIONID=D1AF9DD6BE0F1B0FFEC22FDCACD4C60C; HWWAFSESID=74a559a6522d02930b; HWWAFSESTIME=1697416537740


[Python] 纯文本查看 复制代码
web = Edge()
web.get('http://www.xunbao178.com/wmgj/')
cookies=web.get_cookies()
time.sleep(3)
cookie = [item["name"] + "=" + item["value"] for item in cookies]
cookiestr = '; '.join(item for item in cookie)
print(cookiestr)
url = 'http://www.xunbao178.com/wmgj/buyDetail.gsp?commid=21330854&page=1&group0=%E8%A7%92%E8%89%B2&keyWord=&orderBy=default'
headers = {
    'cookie': cookiestr,
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
}
html = requests.get(url=url, headers=headers)
print(html.text)

这是请求cookie的代码
这是请求获得的cookie   'HWWAFSESTIME=1697419139745; HWWAFSESID=c525694eb42d7cbe58; JSESSIONID=4959C8D1C2A210A7343D8C01C1F4E3DE'
请求的cookie 就是和网页的顺序不大一样,其实调换顺序和网页上复制的一样 也是不能获得页面数据

大佬们在帮忙看一下

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

知心 发表于 2023-10-15 10:38
你把提取的cookies转换成以键值用等号连接,多个键值对用分号分割的字符串试试。另外requesst。session学习一下,适用这种场景
LoveCode 发表于 2023-10-15 11:17

Cookie 一般有两种来源:

  1. 服务器响应头中的 Set-Cookie 字段
  2. 本地浏览器执行 javascript 代码设置的 cookie

我从代码 cookiejar = res.cookies 判断这是从响应头中获取 cookie,并且与从网页复制的 cookie 相比少了一些内容。

而访问某个接口的时候,可能会有 javascript 代码生成某个 cookie,所以还是需要查看一下访问上述代码中的 url_search 时哪些 cookiejs 生成的。

比如以下是访问当前帖子时的 cookie

Snipaste_2023-10-15_11-04-41.jpg

 楼主| kognzhezhi 发表于 2023-10-15 11:25
知心 发表于 2023-10-15 10:38
你把提取的cookies转换成以键值用等号连接,多个键值对用分号分割的字符串试试。另外requesst。session学习 ...

之前也用等号连接了 ,也是不行
 楼主| kognzhezhi 发表于 2023-10-15 11:29
LoveCode 发表于 2023-10-15 11:17
[md]

`Cookie` 一般有两种来源:

爬取的和网页的cookie不一样,不知道和电脑有没有关系,我在另外的电脑上爬取的cookie 就和网页复制的格式是一样的,但是这个电脑就不一样
atest 发表于 2023-10-15 11:29
我做过类似的事情,网站需要登录,所以用了webdrive,然后从webdrive里获取cookie赋值给request的session
            self.cookies = self.driver.get_cookies()
            for cookie in self.cookies:
                self.session.cookies.set(cookie['name'], cookie['value'])
 楼主| kognzhezhi 发表于 2023-10-15 11:34
atest 发表于 2023-10-15 11:29
我做过类似的事情,网站需要登录,所以用了webdrive,然后从webdrive里获取cookie赋值给request的session
...

这个网站不需要登录,但是如果要下载具体的网页内容就需要cookie
atest 发表于 2023-10-15 11:36
kognzhezhi 发表于 2023-10-15 11:34
这个网站不需要登录,但是如果要下载具体的网页内容就需要cookie

我的意思是你可以用类似的代码从网页提取cookie转成session需要的格式,然后用于request调用
LoveCode 发表于 2023-10-15 11:53
kognzhezhi 发表于 2023-10-15 11:29
爬取的和网页的cookie不一样,不知道和电脑有没有关系,我在另外的电脑上爬取的cookie 就和网页复制的格 ...

这个和电脑的关系不大,重点在于判断:

  1. 访问该网页(或者该接口)需要哪些 cookie 键值
  2. 这些需要的 cookie 中哪些是服务器设置、哪些是 JS 生成的。

如果确定了是服务器设置,就访问对应的链接获取响应头中的 Set-Cookie 字段的值。

如果是 JS 生成就需要模拟这个生成的过程等。

楼主提到了 “下载内容时需要 cookie”,我猜测其极有可能是 js 生成的。

楼上坛友 atest 的提议不错,利用 selenium 打开网页获取对应的 cookie,等 cookie 失效了再重复一次就行,省心。

 楼主| kognzhezhi 发表于 2023-10-15 12:02
LoveCode 发表于 2023-10-15 11:53
[md]这个和电脑的关系不大,重点在于判断:

1. 访问该网页(或者该接口)需要哪些 `cookie` 键值

好的 我试试 谢谢了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表