关于 Python 写爬虫使用 cookie 的问题,请教些 cookie 的知识

2018-08-31 13:56:56 +08:00
 bmos
RT,urllib 库, 在爬一个论坛的帖子详情的时候,只得到一堆加密的 JS 代码。忍着没问,捣鼓了几天,解密 js,发现是实现重定向的,并生成两个 cookie。并且发现是否要求重定向是和 cookie 有关,浏览器正常访问,保存了 cookie 就不会要求重定向,删除 COOKIE,关闭 js,就卡在了重定向页面。
因此先使用 selenium 获取了 cookie,按照 MozillaCookieJar 的格式保存。这时候有 11 个 cookie,应该都是 js 生成的。然后 urllib 加载。单次测试成功了,没有重定向。但是加代理,多开了几个线程,使用同一个 cookie,就各种失败。
因此问题来了:
1、还要分析 cookie 到底是干嘛的,如何入门 cookie 的相关知识。
2、本来用 selenium +chrome 也可以,但是加上 IP 代理后,好像网页从来没有打开过,全部失败。代理也验证过,虽然不能 100%使用,70%以上都可以用。甚至同样的代理,用 urllib 库就能正常获取数据。
3709 次点击
所在节点    Python
10 条回复
huaerxiela
2018-08-31 14:29:35 +08:00
要看你这个 js 的情况吧,1,先用代码请求,得到 js 用 requests_html 执行 js 看看 cookie 能不能生成(有的不行),2,和你说的类似,puppeteer 访问获取 cookie,再加到代码中执行 ,3,看 js 生成 cookie 逻辑,是否方便用 py 或 node 代码进行模拟,这个可以解决你那个代理问题,避免使用同一个 cookie,4,方便说下哪个论坛的 js 吗,想研究下
bmos
2018-08-31 14:46:01 +08:00
@huaerxiela www.19lou.com 是否有办法定位 cookie 是哪段 js 生成的?
huaerxiela
2018-08-31 15:00:01 +08:00
@bmos 找到生成逻辑了,我尝试写下,一会告诉你
yumenlong
2018-08-31 15:18:10 +08:00
每个代理使用不用的 cookie 试试。
huaerxiela
2018-08-31 16:01:45 +08:00
import requests
import re


headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Host': 'www.19lou.com'
}
s = requests.session()
s.headers = headers
res = s.get('https://www.19lou.com/forum-269-thread-41401535624978493-1-1.html')
redirect_url = res.url
result_cookie = re.search(r'substr\|(.*?)\|365', res.text).group(1)
result_cookie = result_cookie.split('|')
s.cookies.update({result_cookie[0]: result_cookie[1]})
url = redirect_url.replace('https://www.19lou.com/safeRedirect.htm?', '')
res = s.get(url)
print(res.text)

你看看可以满足你要的要求了吗,本来我想用 execjs 执行返回的 js 的代码,但预期结果总是不符,我发现用 node 去执行,却总是正确的,后来我发现这个 cookie 的键值就存在于返回的 js 中,所以最后就直接提取了,我访问了两个链接,cookie 的键值总是不变,感觉这个 cookie 存在的意义不大啊,也可能还存在潜在的反爬
qybing
2018-09-01 13:16:30 +08:00
@huaerxiela 我也遇到这类的问题了,在爬大众点评商铺详细信息的时候,如果直接访问商铺信息详情页访问不到,必须先访问一次首页,在访问详情页就可以访问到,其中好像就是 COOkie 值被加密了,大佬可有解决方案,js 加密搞 2 天了,始终没有找到怎么生成的
zaaazaa
2018-09-01 14:17:00 +08:00
用 requests 模块呀,用 session 来 get 和 post,根本不用考虑 cookies 的问题
huaerxiela
2018-09-03 09:56:55 +08:00
@qybing 我也是菜鸡呀,你把关键步骤或主要代码贴下,我试试,不然我找着麻烦,还有别的事
bmos
2018-09-03 10:37:52 +08:00
@huaerxiela 非常感谢。可以使用。

@zaaazaa 为什么不需要考虑?如果没有 cookie 的话就会要求到重定向页面,获取不到内容。
zaaazaa
2018-11-25 00:27:11 +08:00
@bmos requests 库会自动处理重定向的,比自带的好用,反正用楼上那段就对了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/484909

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX