关于cookie请教个问题
本帖最后由 kognzhezhi 于 2023-10-16 09:20 编辑问题:最近在练习python,在爬取某一页信息时需要设置cookie,但是每次都是手动输入的,感觉很麻烦,然后想到让程序自己提取cookie 再使用。但是提取的cookie 不能使用(提取的cookie爬取不到信息,自己从网页复制的就可以)
麻烦大家帮我看一下 哪里出了问题,下面是提取cookie的代码
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
web = Edge()
web.get('http://www.xunbao178.com/wmgj/')
cookies=web.get_cookies()
time.sleep(3)
cookie = + "=" + 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 就是和网页的顺序不大一样,其实调换顺序和网页上复制的一样 也是不能获得页面数据
大佬们在帮忙看一下 你把提取的cookies转换成以键值用等号连接,多个键值对用分号分割的字符串试试。另外requesst。session学习一下,适用这种场景
`Cookie` 一般有两种来源:
1. 服务器响应头中的 `Set-Cookie` 字段
2. 本地浏览器执行 `javascript` 代码设置的 `cookie`
**我从代码 `cookiejar = res.cookies` 判断这是从响应头中获取 `cookie`,并且与从网页复制的 `cookie` 相比少了一些内容。**
而访问某个接口的时候,可能会有 `javascript` 代码生成某个 `cookie`,所以还是需要查看一下访问上述代码中的 `url_search` 时哪些 `cookie` 是 `js` 生成的。
比如以下是访问当前帖子时的 `cookie`。
知心 发表于 2023-10-15 10:38
你把提取的cookies转换成以键值用等号连接,多个键值对用分号分割的字符串试试。另外requesst。session学习 ...
之前也用等号连接了 ,也是不行 LoveCode 发表于 2023-10-15 11:17
`Cookie` 一般有两种来源:
爬取的和网页的cookie不一样,不知道和电脑有没有关系,我在另外的电脑上爬取的cookie 就和网页复制的格式是一样的,但是这个电脑就不一样 我做过类似的事情,网站需要登录,所以用了webdrive,然后从webdrive里获取cookie赋值给request的session
self.cookies = self.driver.get_cookies()
for cookie in self.cookies:
self.session.cookies.set(cookie['name'], cookie['value'])
atest 发表于 2023-10-15 11:29
我做过类似的事情,网站需要登录,所以用了webdrive,然后从webdrive里获取cookie赋值给request的session
...
这个网站不需要登录,但是如果要下载具体的网页内容就需要cookie kognzhezhi 发表于 2023-10-15 11:34
这个网站不需要登录,但是如果要下载具体的网页内容就需要cookie
我的意思是你可以用类似的代码从网页提取cookie转成session需要的格式,然后用于request调用 kognzhezhi 发表于 2023-10-15 11:29
爬取的和网页的cookie不一样,不知道和电脑有没有关系,我在另外的电脑上爬取的cookie 就和网页复制的格 ...
这个和电脑的关系不大,重点在于判断:
1. 访问该网页(或者该接口)需要哪些 `cookie` 键值
2. 这些需要的 `cookie` 中哪些是服务器设置、哪些是 `JS` 生成的。
如果确定了是服务器设置,就访问对应的链接获取响应头中的 `Set-Cookie` 字段的值。
如果是 `JS` 生成就需要模拟这个生成的过程等。
**楼主提到了 “下载内容时需要 `cookie`”,我猜测其极有可能是 `js` 生成的。**
楼上坛友 `atest` 的提议不错,利用 `selenium` 打开网页获取对应的 `cookie`,等 `cookie` 失效了再重复一次就行,省心。 LoveCode 发表于 2023-10-15 11:53
这个和电脑的关系不大,重点在于判断:
1. 访问该网页(或者该接口)需要哪些 `cookie` 键值
好的 我试试 谢谢了
页:
[1]
2