05 学会使用cookie💪💪💪

项目:登录后发表评论(开课吧食堂、账号:kaikeba,密码:kaikeba888)


一、目标📝📝📝

  1、学习cookies

  2、学习session

  3、存储cookies

  4、读取cookies

二、首先了解什么是cookies❓

  简单的来说就我们灯枯某个网站的时侯勾选“记住我”选项,当我们再次打开这个网址的时候就会自动登录,这就是cookies起作用

 

三、我们再使用手动登录,配合检查工具查看我们的登录信息(使用检查时记得勾选Preserve log,避免跳转界面是请求丢失)

  1、如图进行操作 

 

 

 

  2、我们在众多请求中找到login请求(在Form Data存在我登陆时的所填信息)

    ①log为我们的账号

    ②pwd为我的密码(只不过进行加密)

 

 

 

 

     ③使用简单的代码模拟用户手动登录

 

   

 

    状态码为200说明登录成功了

 四、发送评论

  想要发表评论,首先得登录,其次得提取和调用登录cookie,然后还需要品论参数,才能完成评论

  1、首先了解post请求和get请求

  是否在url中显示参数 对于用户账号和密码的安全性
get请求
post请求 不显示

  2、发送评论

  

import requests

#引入requests。

url_login = 'https://xiaoke.kaikeba.com/example/wordpress/wp-login.php'

#把请求登录的网址赋值给url。

headers = {

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

}

#加请求头,为了避免被反爬虫

data_login = {

'log': input("请输入账号:"),  #写入账户

'pwd': input("请输入密码:"),  #写入密码

'wp-submit': '登录',

'redirect_to': 'https://xiaoke.kaikeba.com/example/wordpress/2019/10/17/%e5%bc%80%e8%af%be%e5%90%a7%e6%97%a0%e6%95%8c%e5%a5%bd%e5%90%83%e7%9a%84%e9%a3%9f%e5%a0%82%e4%b8%80%e5%91%a8%e8%8f%9c%e8%b0%b1/',

'testcookie': '1'

}

#把有关登录的参数封装成字典,赋值给data。

login_in = requests.post(url_login,headers=headers,data=data_login)

#用requests.post发起请求,放入参数:请求登录的网址、请求头和登录参数,然后赋值给login_in。

cookie = login_in.cookies

#提取cookie的方法:调用requests对象(login_in)的cookie属性获得登录的cookie,并赋值给变量cookie。



url_comment = 'https://xiaoke.kaikeba.com/example/wordpress/2019/10/17/%e5%bc%80%e8%af%be%e5%90%a7%e6%97%a0%e6%95%8c%e5%a5%bd%e5%90%83%e7%9a%84%e9%a3%9f%e5%a0%82%e4%b8%80%e5%91%a8%e8%8f%9c%e8%b0%b1/comment-page-1095/#comment-11650'

#我们想要评论的文章网址。

data_comment = {

'comment': input('请输入你想要发表的评论:'),

'submit': '发表评论',

'comment_post_ID': '35',

'comment_parent': '0'

}

#把有关评论的参数封装成字典。

comment = requests.post(url_comment,headers=headers,data=data_comment,cookies=cookie)

#用requests.post发起发表评论的请求,放入参数:文章网址、headers、评论参数、cookie参数,赋值给comment。

#调用cookie的方法就是在post请求中传入cookie=cookie的参数。

print(comment.status_code)

#打印出comment的状态码,若状态码等于200,则证明我们评论成功。

 

  运行结果:

  

 五、session及其用法

  1、理解什么是会话

    可以简单的理解为我们用浏览器上网,到关闭浏览器的过程,session是会话的过程,用来记录特定用户会话的信息

    

   ①如果没有session,就会出现你加购物车的很多商品,在结算时购物车空无一物,因为服务器没有帮你记录你想买的产品

  ②session和cookie的关系——cookie中存储着session的编码信息,session中又存储了cookie的信息

  ③当浏览器第一访问购物网站时,服务器会返回set cookie的字段给浏览器,而浏览器会把cookie保存到本地

  ④等浏览器第二次访问购物网页时,就会带着cookie去请求,而因为cookie里面带着编码信息,服务器立刻马上就能辨认出这个用户,同时返回和这个用相关的特定编码的session

 代码实现

 

import requests

session = requests.session()

#用requests.session()创建session对象,相当于创建了一个特定的会话,帮我们自动保持了cookie。

url_login = 'https://xiaoke.kaikeba.com/example/wordpress/wp-login.php'

headers = {

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

}

data_login = {

    'log':input('请输入账号:'), #用input函数填写账号和密码,这样代码更优雅,而不是直接把账号密码填上去。

    'pwd':input('请输入密码:'),

    'wp-submit':'登录',

    'redirect_to': 'https://xiaoke.kaikeba.com/example/wordpress/2019/10/17/%e5%bc%80%e8%af%be%e5%90%a7%e6%97%a0%e6%95%8c%e5%a5%bd%e5%90%83%e7%9a%84%e9%a3%9f%e5%a0%82%e4%b8%80%e5%91%a8%e8%8f%9c%e8%b0%b1/',

    'testcookie':'1'

}

session.post(url_login,headers=headers,data=data_login)

#在创建的session下用post发起登录请求,放入参数:请求登录的网址、请求头和登录参数。



url_comment = 'https://xiaoke.kaikeba.com/example/wordpress/wp-comments-post.php'

#把我们想要评论的文章网址赋值给url_comment。

data_comment = {

'comment': input('请输入你想要发表的评论:'),

'submit': '发表评论',

'comment_post_ID': '35',

'comment_parent': '0'

}

#把有关评论的参数封装成字典。

comment = session.post(url_comment,headers=headers,data=data_comment)

#在创建的session下用post发起评论请求,放入参数:文章网址,请求头和评论参数,并赋值给comment。

print(comment)

#打印comment

六、存储cookie

  1、先用代码打印cookie看看

import requests



session = requests.session()



url_login = 'https://xiaoke.kaikeba.com/example/wordpress/wp-login.php'

headers = {

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

}

data_login = {

    'log':input('请输入账号:'),

    'pwd':input('请输入密码:'),

    'wp-submit':'登录',

    'redirect_to': 'https://xiaoke.kaikeba.com/example/wordpress/2019/10/17/%e5%bc%80%e8%af%be%e5%90%a7%e6%97%a0%e6%95%8c%e5%a5%bd%e5%90%83%e7%9a%84%e9%a3%9f%e5%a0%82%e4%b8%80%e5%91%a8%e8%8f%9c%e8%b0%b1/',

    'testcookie':'1'

}



session.post(url_login,headers=headers,data=data_login)

print(type(session.cookies))

#打印cookie的类型,session.cookies就是登录的cookie

print(session.cookies)

#打印cookie

 运行结果:

  ①RequestsCookieJar是cookie的对象类,cookie本身的内容像一个列表,里面又有点像字典的键与值

  ②那么到底如何存储cookie呢

    

 

 代码实现:

  

import requests
import json
#引入requests和json模块。
session = requests.session()
url = 'https://xiaoke.kaikeba.com/example/wordpress/wp-login.php'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
}
data = {
    'log': input('请输入你的账号:'),
    'pwd': input('请输入你的密码:'),
    'wp-submit': '登录',
    'redirect_to': 'https://xiaoke.kaikeba.com/example/wordpress/2019/10/17/%e5%bc%80%e8%af%be%e5%90%a7%e6%97%a0%e6%95%8c%e5%a5%bd%e5%90%83%e7%9a%84%e9%a3%9f%e5%a0%82%e4%b8%80%e5%91%a8%e8%8f%9c%e8%b0%b1/',
    'testcookie': '1'
}
session.post(url, headers=headers, data=data)

cookie_dict = requests.utils.dict_from_cookiejar(session.cookies)
#把cookie转化成字典。
print(cookie_dict)
#打印cookie_dict
cookie_str = json.dumps(cookie_dict)
#调用json模块的dumps函数,把cookie从字典再转成字符串。
print(cookie_str)
#打印cookie_str
f = open('cookie.txt', 'w')
#创建名为cookie.txt的文件,以写入模式写入内容。
f.write(cookie_str)
#把已经转成字符串的cookie写入文件。
f.close()
#关闭文件。

七、读取cookie

  

 

 代码实现:

import requests
import json
session = requests.session()
#创建会话。
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'
}
#添加请求头,避免被反爬虫。
try:
#如果能读取到cookie文件,执行以下代码,跳过except的代码,不用登录就能发表评论。
    cookie_txt = open('cookie_kaikeba.txt', 'r')
    #以reader读取模式,打开名为cookie.txt的文件。
    cookie_dict = json.loads(cookie_txt.read())
    #调用json模块的loads函数,把字符串转成字典。
    cookie = requests.utils.cookiejar_from_dict(cookie_dict)
    #把转成字典的cookie再转成cookie本来的格式。
    session.cookies = cookie
    #获取cookie:就是调用requests对象(session)的cookie属性。

except FileNotFoundError:
#如果读取不到cookie文件,程序报“FileNotFoundError”(找不到文件)的错,则执行以下代码,重新登录获取cookie,再评论。
    print("存储cookie的文件不存在")
    url = 'https://xiaoke.kaikeba.com/example/wordpress/wp-login.php'
    #登录的网址。
    data = {'log': input('请输入你的账号:'),
            'pwd': input('请输入你的密码:'),
            'wp-submit': '登录',
            'redirect_to': 'https://xiaoke.kaikeba.com/example/wordpress/2019/10/17/%e5%bc%80%e8%af%be%e5%90%a7%e6%97%a0%e6%95%8c%e5%a5%bd%e5%90%83%e7%9a%84%e9%a3%9f%e5%a0%82%e4%b8%80%e5%91%a8%e8%8f%9c%e8%b0%b1/',
            'testcookie': '1'}
    #登录的参数。
    session.post(url, headers=headers, data=data)
    #在会话下,用post发起登录请求。

    cookie_dict = requests.utils.dict_from_cookiejar(session.cookies)
    #把cookie转化成字典。
    cookie_str = json.dumps(cookie_dict)
    #调用json模块的dump函数,把cookie从字典再转成字符串。
    f = open('cookie_kaikeba.txt', 'w')
    #创建名为cookie.txt的文件,以写入模式写入内容
    f.write(cookie_str)
    #把已经转成字符串的cookie写入文件
    f.close()
    #关闭文件


url_comment = 'https://xiaoke.kaikeba.com/example/wordpress/wp-comments-post.php'
#文章的网址。
data_comment = {
'comment': input('请输入你想要发表的评论:'),
'submit': '发表评论',
'comment_post_ID': '35',
'comment_parent': '0'
}
#评论的参数。
comment = session.post(url_comment,headers=headers,data=data_comment)
#在创建的session下用post发起评论请求,放入参数:文章网址,请求头和评论参数,并赋值给comment。
print(comment.status_code)
#打印comment的状态码

八、项目完整代码

import requests

import json

session = requests.session()

headers = {

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

}



def cookie_read(): # cookie读取。

    cookie_txt = open('cookie_kaikeba.txt', 'r')

    cookie_dict = json.loads(cookie_txt.read())

    cookie = requests.utils.cookiejar_from_dict(cookie_dict)

    return (cookie)



def sign_in():

    url_login = 'https://xiaoke.kaikeba.com/example/wordpress/wp-login.php'

    data_login = {'log': input('请输入你的账号'),

            'pwd': input('请输入你的密码'),

            'wp-submit': '登录',

            'redirect_to': 'https://xiaoke.kaikeba.com/example/wordpress/2019/10/17/%e5%bc%80%e8%af%be%e5%90%a7%e6%97%a0%e6%95%8c%e5%a5%bd%e5%90%83%e7%9a%84%e9%a3%9f%e5%a0%82%e4%b8%80%e5%91%a8%e8%8f%9c%e8%b0%b1/',

            'testcookie': '1'}

    session.post(url_login, headers=headers, data=data_login)

    # cookie存储。

    cookie_dict = requests.utils.dict_from_cookiejar(session.cookies)

    cookie_str = json.dumps(cookie_dict)

    f = open('cookie_kaikeba.txt', 'w')

    f.write(cookie_str)

    f.close()



def write_message(): #发表评论。

    url_comment = 'https://xiaoke.kaikeba.com/example/wordpress/wp-comments-post.php'

    data_comment = {

        'comment': input('请输入你要发表的评论:'),

        'submit': '发表评论',

        'comment_post_ID': '35',

        'comment_parent': '0'

    }

    return (session.post(url_comment, headers=headers, data=data_comment))



try:

    session.cookies = cookie_read()

except FileNotFoundError:

    sign_in()

    session.cookies = cookie_read()



num = write_message()

if num.status_code == 200:

    print('成功啦!')

else:

    sign_in()

    session.cookies = cookie_read()
    num = write_message()

 

 

 

 

 

  

 

posted @ 2021-02-09 11:40  贫僧敲代码  阅读(188)  评论(0)    收藏  举报