cook和urllib高级用法cookjar

cookie使用 cookie是什么?用在哪呢? http,有一个特点:无状态 请求a页面==》响应a页面 建立tcp链接,断开tcp链接 请求b页面==》响应b页面 建立链接,断开链接 但是有时候,这种特点有缺陷 登录时候 post请求登录==》响应登录信息 访问登录后的页面==》响应信息 根据http的特点。两者之间没有关系,但是我们必须让他们产生关系。 引入了会话机制(cookie) post请求登录==》响应登录信息 在响应头里面,会有服务端让客户端保存的信息,服务端给了客户端一个身份认证 访问登录后的页面(在请求头里面带着身份认证过去)==》响应信息 抛出问题: 一个网页会对应一个url,个人资料页也有一个url 如何代码访问个人资料页面呢? http://www.renren.com/960481378/profile 问题解决 (1)携带cookie 通过浏览器抓包,抓取到cookie,然后复制到代码中,定制请求头部即可 (2)模拟登录 模拟浏览器先发送post,然后发送get

import urllib.request

headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    # Accept-Encoding: gzip, deflate
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Connection': 'keep-alive',
    'Cookie': 'anonymid=jn2kac20-vwybk7; depovince=GW; jebecookies=327e5ab9-95ae-440f-a965-51db2d87db19|||||; _r01_=1; JSESSIONID=abcYpL5gISu24gozM5Bzw; ick_login=32dac5d6-df6c-4b1b-aca7-879d969bf0cc; _de=F872F5698F7602B30ADE65415FC01940; p=1d23af358dc682bbc7d3ef83342f21028; first_login_flag=1; ln_uact=17701256561; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; t=1e146bc78b33712a33218ebe265a3ad58; societyguester=1e146bc78b33712a33218ebe265a3ad58; id=960481378; xnsid=a4195a84; ver=7.0; loginfrom=null; wp_fold=0; jebe_key=e18af995-59af-4c49-ba66-316ff844796f%7C86ba94a3b75a9848502e25ac92562959%7C1539140350704%7C1; jebe_key=e18af995-59af-4c49-ba66-316ff844796f%7C86ba94a3b75a9848502e25ac92562959%7C1539140350704%7C1%7C1539140565608',
    'Host': 'www.renren.com',
    'Referer': 'http://www.renren.com/960481378',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
}
url = 'http://www.renren.com/960481378/profile'
request = urllib.request.Request(url=url, headers=headers)

response = urllib.request.urlopen(request)

with open('renren.html', 'wb') as fp:
    fp.write(response.read())

cookjar爬取人人网

import urllib.request
import urllib.parse
import http.cookiejar

# 创建一个cookiejar对象,用来保存cookie
ck = http.cookiejar.CookieJar()
# 通过ck创建一个handler
handler = urllib.request.HTTPCookieProcessor(ck)
# 通过handler创建一个opener
opener = urllib.request.build_opener(handler)
# 再往下,所有的请求,都使用opener.open()方法发送,那么就会自动保存和携带cookie

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
}

# 首先向这个地址发送post请求
post_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2018931119824'
formdata = {
    'email': '17701256561',
    'icode': '',
    'origURL': 'http://www.renren.com/home',
    'domain': 'renren.com',
    'key_id': '1',
    'captcha_type': 'web_login',
    'password': '0ecca3193d71e76959033bac6ecd009210c0b90ed14f35e2c8cdfbe512c83986',
    'rkey': 'cb15f985754fd884a44506ff5db1256e',
    'f': 'http%3A%2F%2Fwww.renren.com%2F960481378',
}
# 处理formdata
formdata = urllib.parse.urlencode(formdata).encode('utf8')
post_request = urllib.request.Request(url=post_url, headers=headers)
response = opener.open(post_request, data=formdata)

print(response.read().decode('utf8'))

# 通过代码如何保存和携带cookie

# 如何访问登录后的页面
info_url = 'http://www.renren.com/960481378/profile'
info_request = urllib.request.Request(url=info_url, headers=headers)
response = opener.open(info_request)

with open('info.html', 'wb') as fp:
    fp.write(response.read())
cook和urllib高级用法cookjar_第1张图片
gfg.jpeg

你可能感兴趣的:(cook和urllib高级用法cookjar)