【问题标题】:extracting specific Cookies from the Cookie Jar using Python使用 Python 从 Cookie Jar 中提取特定的 Cookie
【发布时间】:2021-04-28 04:54:55
【问题描述】:

我正在尝试使用 python browser_cookie3 模块从特定站点的 chrome 中提取 cookie。网站名称:nseindia.com

这个(工作)代码已分发给我们,并且由于需要磁盘读写而变得相当慢。还有一些依赖,代码不是很有效。

代码sn-p:

import browser_cookie3, csv, re
cj = browser_cookie3.chrome()
cookielist = list(browser_cookie3.chrome())
cookies = str(cj)
CookieFile = open('c:\\temp\\temp2.txt','w+')
CookieFile.write(cookies)
CookieFile.close()
with open('c:\\temp\\temp2.txt', newline='') as f:
reader = csv.reader(f)
cookies_list = next(reader) 
#this traverses thru each item in the list and displays the cookie as well as the value.
for elem in cookies_list:
    mycook = re.search(r'for .nseindia.com/>',elem)
    if mycook:
        thiselem = str(elem)
        print(re.search(r'<Cookie (.+?)for \.nseindia\.com', thiselem).group(1))

现在,我已经尝试使用 re.search 提取所有 6 个项目(来自 nseindia.com),但没有给我想要的结果。

以下是我已经尝试过的:

cookies = str(cj)
re.search('<Cookie RT=(.*?)for .nseindia.com',cookies).group(1)

另外我们还尝试将 cookie 对象更改为列表然后进行提取,但失败了。 当我们尝试将 String 对象 (varname = cookie) 转换为列表,然后尝试使用 re.search 进行提取时也失败了。

我的问题:如果有人能给我一个可靠的方法来以有效和高效的方式实现上述功能,我将不胜感激。 TIA

【问题讨论】:

  • 这对我不起作用,cj = browser_cookie3.chrome() throws browser_cookie3.BrowserCookieError: Failed to find Chrome cookie
  • 感谢您试用 Wiktor,您的 browser_cookie3 可能无法正常工作,或者 Chrome 的版本可能不同。我正在使用版本 87
  • 如果需要帮助,可以分享c:\\temp\\temp2.txt的内容。或者至少是你想要得到的一些例子。我无法运行您的代码,它不可重现。
  • temp2.​​txt的内容非常大,分享一下,这里有一个sn-p..

标签: python regex session web-scraping cookies


【解决方案1】:

我找到了一种无需磁盘读写即可实现结果的方法,

import browser_cookie3,re
cj = browser_cookie3.chrome()
cookies = str(cj)
cookielist = cookies.split(",")
for elem in cookielist:
    mycook = re.search(r'for .nseindia.com/>',elem)
    if mycook:
        thiselem = str(elem)
        print(re.search(r'<Cookie (.+?)for \.nseindia\.com', thiselem).group(1))

【讨论】:

    【解决方案2】:

    你可以使用

    import browser_cookie3,re
    cj = browser_cookie3.chrome()
    results = re.findall(r'<Cookie\s([^<>]+?)\sfor\s\.nseindia\.com', str(cj))
    

    如果您想将它们全部打印出来,请使用print(results)for r in results: print(r)

    请参阅regex demo详情

    • &lt;Cookie - &lt;Cookie 字符串
    • \s - 一个空格
    • ([^&lt;&gt;]+?) - 第 1 组:@987654329 以外的任何一个或多个字符@>` 尽可能少
    • \s - 一个空格
    • for - for
    • \s - 一个空格
    • \.nseindia\.com - .nseindia.com 字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-11
      • 2013-05-29
      • 2021-05-07
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多