我想使用从Chrome浏览器复制的Cookie,但会出错。
import urllib.request
import re
def open_url(url):
header={"User-Agent":r'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
Cookies={'Cookie':r"xxxxx"}
Request=urllib.request.Request(url=url,headers=Cookies)
response=urllib.request.urlopen(Request,timeout=100)
return response.read().decode("utf-8")
Run Code Online (Sandbox Code Playgroud)
我的代码在哪里出错?那是headers = Cookies吗?
使用 urllib.request 时的正确方法是使用OpenerDirector填充有CookieProcessor:
cookieProcessor = urllib.request.HTTPCookieProcessor()
opener = urllib.request.build_opener(cookieProcessor)
Run Code Online (Sandbox Code Playgroud)
然后你使用它opener,它会自动处理cookie:
response = opener.open(request,timeout=100)
Run Code Online (Sandbox Code Playgroud)
默认情况下,CookieJar ( http.cookiejar.CookieJar) 用于简单的内存存储,但FileCookieJar如果您需要长期存储持久性 cookie,则可以使用 CookieJar ( ),http.cookiejar.MozillaCookieJar如果您想使用以cookies.txt现在遗留的 Mozilla 格式存储的持久性 cookie,甚至可以使用 CookieJar ( )
如果您想使用网络浏览器中现有的 cookie,您必须首先将它们存储在 cookie.txt 兼容文件中,并将它们加载到 MozillaCookieJar 中。对于 Mozilla,您可以找到一个附加Cookie Exporter。对于其他浏览器,您必须通过读取浏览器中所需的cookie内容来手动创建cookie.txt文件。该格式可以在非官方 Cookie 常见问题解答中找到。摘录:
...每一行包含一个名称-值对。示例 cookies.txt 文件可能具有如下所示的条目:
.netscape.com 正确/错误 946684799 NETSCAPE_ID 100103
每行代表一条存储的信息。每个字段之间都会插入一个选项卡。
从左到右,每个字段代表的含义如下:
- 域 - 创建并且可以读取变量的域。
- flag - TRUE/FALSE 值,指示给定域内的所有计算机是否可以访问该变量。该值由浏览器自动设置,具体取决于您为域设置的值。
- path - 变量有效的域内的路径。
- secure - TRUE/FALSE 值,指示是否需要与域的安全连接来访问变量。*expiration - 变量到期的 UNIX 时间。UNIX 时间定义为自 1970 年 1 月 1 日 00:00:00 GMT 以来的秒数。
- 名称 - 变量的名称。
- 值 - 变量的值。
但正常的方法是模拟完整的会话并自动从响应中提取 cookie。
Den*_*1al -2
您可以使用更好的库(恕我直言)- requests.
import requests
headers = {
'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
cookies = dict(c1="cookie_numba_one")
r = requests.get('http://example.com', headers = headers, cookies = cookies)
print(r.text)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8257 次 |
| 最近记录: |