【urllib手动在请求头中添加Cookies】、【urllib利用CookieJar,代码登录成功后自动保存cookie】、【requests模块】

一、手动在请求头中添加Cookies
1.手动登录成功某网站。
2.直接获取个人中心的界面,进入开发者模式。
3.手动复制对应的Cookies,放在请求头里。

headers_cookies = {

        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"
         ,
        "Cookie":"enc=iiGrPCjNaKrg1v%2F5lXtnIqp6o%2FrPXXy7tXVpHeqN9oxQye4rQFxwrGx4tDd1pRTSCkvf9%2B6ErFQs4v7x8SNIkw%3D%3D; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; t=c889c0e1e273cf2939a6c990381730d6; cookie2=1ecb15e9d9de99d3fd25e7e25e472f00; _tb_token_=fdee4735e845e; _mw_us_time_=1574585189795; cna=JpntEn4zKmUCAdr3/fi0olME; v=0; unb=475474234; uc3=lg2=Vq8l%2BKCLz3%2F65A%3D%3D&nk2=rq2ne9aHIYI%2B8A%3D%3D&id2=Vyu7Cf8teWiu&vt3=F8dByuQCLcivnL%2FWsNc%3D; csg=ecb1b0f5; lgc=%5Cu817F%5Cu817F%5Cu94C1%5Cu7B97%5Cu76D8; cookie17=Vyu7Cf8teWiu; dnk=%5Cu817F%5Cu817F%5Cu94C1%5Cu7B97%5Cu76D8; skt=4e2c539eff7b5151; existShop=MTU3NDU4NTMxOA%3D%3D; uc4=nk4=0%40rPfgv7AcZSglmIa%2F5ul%2BWfgTkEBz&id4=0%40VXwn3O44NGB%2FEcfNGooHpY51Kmo%3D; tracknick=%5Cu817F%5Cu817F%5Cu94C1%5Cu7B97%5Cu76D8; _cc_=Vq8l%2BKCLiw%3D%3D; tg=0; _l_g_=Ug%3D%3D; sg=%E7%9B%9842; _nk_=%5Cu817F%5Cu817F%5Cu94C1%5Cu7B97%5Cu76D8; cookie1=UNdc8FKi%2BMtMXWKoS6v4RYwgEuOzL2IAGSRqfWHJq4g%3D; mt=ci=98_1; uc1=cookie16=VFC%2FuZ9az08KUQ56dCrZDlbNdA%3D%3D&cookie21=WqG3DMC9FxUx&cookie15=U%2BGCWk%2F75gdr5Q%3D%3D&existShop=false&pas=0&cookie14=UoTbmVUxGse4ow%3D%3D&tag=8&lng=zh_CN; isg=BI-P0iWzDlwu1A0dmv2dMV_NHiNZHCRe7y2xe6GcK_4FcK9yqYRzJo1iduDrE7tO; l=dBLhG9xIvMdJJxVEBOCanurza77OSIRYYuPzaNbMi_5B26T_bgbOkdW_cF96VjWf9STB4HAa5IJ9-etkZG6gldd8E5vrzDc."
    }

4.创建请求对象

request_cookies = urllib.request.Request(url,headers=headers_cookies)

二、利用CookieJar,代码登录成功后自动保存cookie
1.整体步骤
①使用代码登录,登录成功后,CookieJar自动保存cookie
②使用自动保存cookie 的Openner访问个人中心
2.注意问题
①需要查看登录网站时涉及的是Post请求还是Get请求,因二者请求的不同,后续发送请求时,urllib.request.Request传的参数也不同(如是Post请求,urllib.request.Request(data=XXX)需填写data参数)。
在这里插入图片描述
②登录的四个参数中,username、pwd已知,而formhash、backurl两个参数是在个人中心之前的登录页的网址:https://www.yaozh.com/login/中通过检查前端源码找到的。
在这里插入图片描述
在这里插入图片描述

login_form_data = {
      "username":"xxxxxxx",
      "pwd":"xxxxxxx",
      #formhash以及backurl两个参数是在个人中心之前的登录页的网址:https://www.yaozh.com/login/中通过检查前端源码找到的
      "formhash":"xxxxxxxxxxxx",#该参数是在最开始的登录网页中寻找的。
      "backurl":"xxxxxxxxxxxx"#该参数是在最开始的登录网页中寻找的,注意添加参数前添加https
  }

三、代码1——手动在请求头中添加Cookies

import urllib.request

def function_cookies():
    #1.URL信息
    url = "https://i.taobao.com/my_taobao.htm?spm=a21bo.2017.754894437.3.2fba11d9o37aoc&ad_id=&am_id=&cm_id=&pm_id=1501036000a02c5c3739"
    #2. 添加请求头
    headers_cookies = {

        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"
         ,
        "Cookie":"enc=iiGrPCjNaKrg1v%2F5lXtnIqp6o%2FrPXXy7tXVpHeqN9oxQye4rQFxwrGx4tDd1pRTSCkvf9%2B6ErFQs4v7x8SNIkw%3D%3D; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato%3D0; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; t=c889c0e1e273cf2939a6c990381730d6; cookie2=1ecb15e9d9de99d3fd25e7e25e472f00; _tb_token_=fdee4735e845e; _mw_us_time_=1574585189795; cna=JpntEn4zKmUCAdr3/fi0olME; v=0; unb=475474234; uc3=lg2=Vq8l%2BKCLz3%2F65A%3D%3D&nk2=rq2ne9aHIYI%2B8A%3D%3D&id2=Vyu7Cf8teWiu&vt3=F8dByuQCLcivnL%2FWsNc%3D; csg=ecb1b0f5; lgc=%5Cu817F%5Cu817F%5Cu94C1%5Cu7B97%5Cu76D8; cookie17=Vyu7Cf8teWiu; dnk=%5Cu817F%5Cu817F%5Cu94C1%5Cu7B97%5Cu76D8; skt=4e2c539eff7b5151; existShop=MTU3NDU4NTMxOA%3D%3D; uc4=nk4=0%40rPfgv7AcZSglmIa%2F5ul%2BWfgTkEBz&id4=0%40VXwn3O44NGB%2FEcfNGooHpY51Kmo%3D; tracknick=%5Cu817F%5Cu817F%5Cu94C1%5Cu7B97%5Cu76D8; _cc_=Vq8l%2BKCLiw%3D%3D; tg=0; _l_g_=Ug%3D%3D; sg=%E7%9B%9842; _nk_=%5Cu817F%5Cu817F%5Cu94C1%5Cu7B97%5Cu76D8; cookie1=UNdc8FKi%2BMtMXWKoS6v4RYwgEuOzL2IAGSRqfWHJq4g%3D; mt=ci=98_1; uc1=cookie16=VFC%2FuZ9az08KUQ56dCrZDlbNdA%3D%3D&cookie21=WqG3DMC9FxUx&cookie15=U%2BGCWk%2F75gdr5Q%3D%3D&existShop=false&pas=0&cookie14=UoTbmVUxGse4ow%3D%3D&tag=8&lng=zh_CN; isg=BI-P0iWzDlwu1A0dmv2dMV_NHiNZHCRe7y2xe6GcK_4FcK9yqYRzJo1iduDrE7tO; l=dBLhG9xIvMdJJxVEBOCanurza77OSIRYYuPzaNbMi_5B26T_bgbOkdW_cF96VjWf9STB4HAa5IJ9-etkZG6gldd8E5vrzDc."
    }
    #3.创建请求对象
    request_cookies = urllib.request.Request(url,headers=headers_cookies)
    #4发送请求对象,获取response
    response = urllib.request.urlopen(request_cookies)
    data = response.read()
    print(type(data))#<class 'bytes'>

    with open("cookies2.html",'wb')as f:
        f.write(data)

function_cookies()

四、代码2——CookieJar自动保存cookie

import urllib.request
from http import cookiejar#从http模块中导入cookiejar这个包,cookiejar自动保存cookie。
from urllib import parse#有着转译的功能,可将字典类型转换为字符串类型
#分为两步:1.代码登录。2.使用带着cookie的openner访问个人中心。
#1. 代码登录
  #1.1 登录的网址
login_url ="https://www.yaozh.com/login"
  #1.2 登录的参数
login_form_data = {
      "username":"xxxxxx",
      "pwd":"xxxxxx",
      #个人中心之前的登录页的网址:https://www.yaozh.com/login/
      #从上述网站找登录参数formhash、backurl
      #后台根据发送的请求方式来判断的  如果你是get(登录页面),如果POST(登录结果)
      "formhash":"xxxx",#该参数是在最开始的登录网页中寻找的。
      "backurl":"xxxxx"#该参数是在最开始的登录网页中寻找的,注意添加参数前添加https
  }
#1.3 发送登录请求 POST请求
cookie_jar = cookiejar.CookieJar()#用来保存Cookie
#定义有添加cookie功能的处理器
cookie_handler = urllib.request.HTTPCookieProcessor(cookie_jar)#有cookie功能的处理器
#根据处理器,生成openner
openner = urllib.request.build_opener(cookie_handler)
#创建请求头
headers = {
    "User-Agent": "Mozilla/5.0(Linux;Android6.0;Nexus5Build/MRA58N)AppleWebKit / 537.36(KHTML, likeGecko)Chrome / 75.0.3770.100MobileSafari / 537.36"
}
#1.参数 login_form_data 需要由dic转译/转码为str,因为urllib.request.Request(data=XXX)中data不能使用字典形式;2.post请求的data需要是bytes类型,因此用.encode("utf-8")将str转为bytes
login_form_data_str = urllib.parse.urlencode(login_form_data).encode("utf-8")#.encode 将str--->bytes
#带着参数 发送POST请求
login_request = urllib.request.Request(login_url,headers=headers,data=login_form_data_str)
#如果登录成功,cookiejar 自动保存 cookie
openner.open(login_request)# 如果成功,则就有了cookie

#2. 代码带着cookie 访问个人中心
center_url = "https://www.yaozh.com/member/"#个人中心的网站
center_request = urllib.request.Request(center_url,headers=headers)
response = openner.open(center_url)#带有CookiJar的openner去请求
#bytes-->str
data = response.read().decode()
with open("cookie3.html",'w',encoding="utf-8") as f:
    f.write(data)

五、爬虫中重要的第三方库——requests
1.安装:pip install requests
2.基本代码

import requests
url = "http://www.baidu.com"
response = requests.get(url)
#content属性返回的数据类型是 bytes;而text 属性返回类型是str(data = response.text())
#优先使用.content()
data = response.content.decode("utf-8")

3.发送post请求和添加参数的方法相似
requests.post(url, data=(参数{}) , json= (参数))
六、代码3——requests获取各种请求头、响应头等信息

import requests

class RequestSpider(object):
    def __init__(self):
        url = "http://www.baidu.com"
        headers = {
            "User-Agent": "Mozilla/5.0(Linux;Android6.0;Nexus5Build/MRA58N)AppleWebKit / 537.36(KHTML, likeGecko)Chrome / 75.0.3770.100MobileSafari / 537.36"
        }

        self.response = requests.get(url, headers=headers)
    def run(self):
        data = self.response.content

        #1.获取请求头

        request_headers = self.response.request.headers
        print(request_headers)
        #2.获取响应头
        response_headers = self.response.headers
        print(response_headers)
        #3.获取响应状态码
        code = self.response.status_code
        print(code)
        #4.请求的cookie
        request_cookie = self.response.request._cookies
        print(request_cookie)
        #5.响应的cookie
        response_cookie = self.response.cookies
        print(response_cookie)
RequestSpider().run()

七、代码4——requests基本代码

import requests

url = "http://www.baidu.com/s?"
params = {"wd":"刀塔"}#在requests模块中,中文字段的参数自动转译
headers = {
    "User-Agent": "Mozilla/5.0(Linux;Android6.0;Nexus5Build/MRA58N)AppleWebKit / 537.36(KHTML, likeGecko)Chrome / 75.0.3770.100MobileSafari / 537.36"
}
response = requests.get(url, headers=headers, params=params)
data = response.content.decode("utf-8")#.content()返回的是bytes类型的数据
with open("request_use2.html", 'w',encoding="utf-8") as f:
    f.write(data)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用urllib的HTTPCookieProcessor和urllib.request.build_opener()方法来自动保存cookie。 具体步骤如下: 1. 导入urllib的HTTPCookieProcessor和urllib.request.build_opener()方法。 2. 创建一个CookieJar对象,用于保存cookie。 3. 创建一个HTTPCookieProcessor对象,并将CookieJar对象作为参数传入。 4. 使用urllib.request.build_opener()方法创建一个opener对象,并将HTTPCookieProcessor对象作为参数传入。 5. 使用opener对象发送请求,自动保存cookie。 示例代码如下: import urllib.request import http.cookiejar # 创建一个CookieJar对象,用于保存cookie cookie_jar = http.cookiejar.CookieJar() # 创建一个HTTPCookieProcessor对象,并将CookieJar对象作为参数传入 cookie_processor = urllib.request.HTTPCookieProcessor(cookie_jar) # 使用urllib.request.build_opener()方法创建一个opener对象,并将HTTPCookieProcessor对象作为参数传入 opener = urllib.request.build_opener(cookie_processor) # 使用opener对象发送请求,自动保存cookie response = opener.open('http://www.example.com') # 打印cookie for cookie in cookie_jar: print(cookie) ### 回答2: Python 是一种高级编程语言,非常适合进行网络数据爬取和处理。而在 Python 爬虫urllib 是一个重要的库,可以帮助我们轻松实现网页数据的请求和处理。 在进行 Python 爬虫开发时,有时需要保存 cookie ,以便之后再次使用,这在从网站获取数据时非常有用。为了自动保存 cookie ,可以在 urllib 使用 Request 类的 http.cookiejar.CookieJar() 对象。 下面是一份用 Python 编写自动保存 cookie 的示例代码: ```python import urllib.request, http.cookiejar cookiejar = http.cookiejar.CookieJar() cookie_support = urllib.request.HTTPCookieProcessor(cookiejar) opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler) urllib.request.install_opener(opener) # 发送请求,并保存 cookie 信息 response = urllib.request.urlopen('http://www.baidu.com') for cookie in cookiejar: print('Name: ' + cookie.name) print('Value: ' + cookie.value) print('Host: ' + cookie.domain) print('Path: ' + cookie.path) # 保存 cookie 到文件 filename = 'cookie.txt' cookiejar.save(filename, ignore_discard=True, ignore_expires=True) ``` 在上面的代码,首先创建了一个 CookieJar 对象,并将其作为参数传递给了 HTTPCookieProcessor 对象,然后使用 build_opener() 方法将其与 HTTP 请求处理器结合起来,并将其安装到全局 urllib.request 。接下来,通过 urlopen() 方法向百度发送请求,并将返回的 cookie 信息保存到 CookieJar 对象。最后,使用 save() 方法将 cookie 信息保存到 cookie.txt 文件,并将 ignore_discard 和 ignore_expires 参数都设置为 True,以保证保存所有的 cookie 信息。 通过使用上述代码,我们可以轻松实现 Python 爬虫自动保存 cookie 的功能。同时,如果在后续的爬虫开发需要使用之前保存的 cookie ,只需要将其从文件读取并加载到 CookieJar 对象即可。 ### 回答3: 在进行Python爬虫开发时,经常需要使用到urllib库来发送http请求。而使用urllib库发送的请求需要携带cookie,否则很多网站并不会认为用户已经登录,这样就会导致后续的操作受到限制。因此,在Python编写爬虫程序时,自动保存cookie就显得非常重要了,这样可以帮助我们实现更高效、稳定的爬虫程序。 首先,我们需要在Python使用urllib库发送http请求获取cookie,这可以通过代码如下实现: ``` import urllib.request import http.cookiejar def get_cookie(): # 创建cookie实例 cookie = http.cookiejar.CookieJar() handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) # 发送请求 response = opener.open('http://www.example.com') # 输出得到的cookie for item in cookie: print(item.name + "=" + item.value) ``` 上述代码使用了Python内置的cookiejar库来创建一个cookie实例,并使用HTTPCookieProcessor来处理发送请求时所携带的cookie。最后我们可以使用for循环来遍历返回的cookie。 当然,如果我们需要将cookie保存下来,稍作处理,方便后续的使用,我们可以对上述代码进行一定的修改,如下: ``` import urllib.request import http.cookiejar def save_cookie(): filename = 'cookie.txt' # 创建MozillaCookieJar实例 cookie = http.cookiejar.MozillaCookieJar(filename) handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) # 发送请求 response = opener.open('http://www.example.com') # 保存cookie到文件 cookie.save(ignore_discard=True, ignore_expires=True) ``` 在上述代码,我们在创建cookie实例时,使用了MozzillaCookieJar,这是一个专门用于保存cookie的对象,它可以直接将cookie保存到文件。在进行cookie保存时,我们可以忽略掉cookie过期的时间,以及当窗口关闭时cookie是否自动清除的属性。最后,我们可以使用cookie.save()函数直接将cookie保存到文件。 除了上述的方法,我们还可以在cookie文件查找到需要用到的cookie值,这可以通过如下代码实现: ``` import urllib.request import http.cookiejar def load_cookie(): filename = 'cookie.txt' # 创建MozillaCookieJar实例 cookie = http.cookiejar.MozillaCookieJar() cookie.load(filename, ignore_discard=True, ignore_expires=True) handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) # 发送请求 response = opener.open('http://www.example.com') # 输出返回的结果 print(response.read().decode('utf-8')) ``` 上述代码,我们可以通过调用cookie.load()函数,从之前保存的cookie文件读取出cookie数据,然后使用HTTPCookieProcessor来处理发送请求时所携带的cookie,并使用build_opener创建对应的opener对象,以访问目标网站。最后我们可以通过response.read()方法得到服务器返回的结果,然后进行后续处理。 总的来说,自动保存cookie可以帮助我们更加轻松、高效地使用Python进行爬虫开发,同时也可以提高爬虫程序的稳定性。如果我们能够正确地使用上述方法,相信自动保存cookie在爬虫程序开发将会发挥不可替代的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值