如何申请自己的个人网站,php网站怎么做自适应,windows优化大师会员,网址升级中 请稍后访问文章目录 前言项目#xff1a;发表博客评论post请求 cookies及其用法session及其用法存储cookies读取cookies复习 前言
第1-8关我们学习的是爬虫最为基础的知识#xff0c;从第9关开始#xff0c;我们正式打开爬虫的进阶之门#xff0c;学习爬虫更多的精进知识。
在前面几… 文章目录 前言项目发表博客评论post请求 cookies及其用法session及其用法存储cookies读取cookies复习 前言
第1-8关我们学习的是爬虫最为基础的知识从第9关开始我们正式打开爬虫的进阶之门学习爬虫更多的精进知识。
在前面几关我们实操的爬虫项目里都没有涉及到登录这一行为。
但实际很多情况下由于网站的限制不登录的话我们只能爬取到一小部分信息。
而我们想要登录的话则需要带上小饼干。
什么是小饼干小饼干就是cookies的中文翻译它是模拟登录时会涉及到的重要知识点。在后面我会为你详细解释原理。
这一关我准备带你完成一个项目实操——借助Python发表博客评论。其中会应用到这一块知识。
项目发表博客评论
这个博客你之前见过是我们搭建好的爬虫教学演练网站—— 因为博客的设置如果我们不登录的话就无法在文章下面评论留言。
我们先来看看“正常人”的登录操作是怎样的。
作为“正常人”我们会先找到博客的登录按钮在博客首页的右下角然后点击。 网页会跳转到登录页面我们会填写账号密码点击登录完成登录操作。 为了让你也能动手操作我提前注册了一个账号——账号spiderman密码crawler334566。请你复制下面的博客登录网址在浏览器打开
https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php 上图左边是“正常人”的操作填上账号和密码右边我们可以用工程师的思维来分析浏览器的登录请求是怎么发送的。你需要做的是先正常操作——填写完账号密码别点击登录再用工程师的做法操作右击打开“检查”工具点击【network】勾选【preserve log】持续显示请求记录防止请求记录被刷新。
确认一遍“检查”工具打开了【preserve log】勾选好了ok了就点击登录。
我们展开第0个请求【wp-login.php】浏览一下【headers】。在【General】键里我们可以先只看前两个参数【Request URL】请求网址和【Request Method】请求方式。 是不是有点困惑这里的请求方式是post而不是我们之前学过的get。
post请求
其实post和get都可以带着参数请求不过get请求的参数会在url上显示出来。
比如在第6关我们最终请求的URL会变得超级长。它们都是参数。
但post请求的参数就不会直接显示而是隐藏起来。像账号密码这种私密的信息就应该用post的请求。如果用get请求的话账号密码全部会显示在网址上这显然不科学你可以这么理解get是明文显示post是非明文显示。
通常get请求会应用于获取网页数据比如我们之前学的requests.get()。post请求则应用于向网页提交数据比如提交表单类型数据像账号密码就是网页表单的数据。
get和post是两种最常用的请求方式除此之外还有其他类型的请求方式如head、options等这里我们就不详讲了因为一般很少用到。
现在get和post这两种请求方式的区别弄懂了吧我们继续往下看—— 关于【headers】面板里的几个参数在第4、5关我们已经陆续讲完了唯独除了【response headers】我们还没有讲。
正如【requests headers】存储的是浏览器的请求信息【response headers】存储的是服务器的响应信息。我们这一关要找的cookies就在其中。
你会看到在【response headers】里有set cookies的参数。set cookies是什么意思就是服务器往浏览器写入了cookies。
现在我们就可以谈一谈cookies究竟是什么它有什么用
cookies及其用法
其实你对cookies并不陌生我敢肯定你见过它。比如一般当你登录一个网站你都会在登录页面看到一个可勾选的选项“记住我”如果你勾选了以后你再打开这个网站就会自动登录这就是cookie在起作用。 当你登录博客账号spiderman并勾选“记住我”服务器就会生成一个cookies和spiderman这个账号绑定。接着它把这个cookies告诉你的浏览器让浏览器把cookies存储到你的本地电脑。当下一次浏览器带着cookies访问博客服务器会知道你是spiderman你不需要再重复输入账号密码即可直接访问。
当然cookies也是有时效性的过期后就会失效。你应该有过这样的体验哪怕勾选了“记住我”但一段时间过去了网站还是会提示你要重新登录就是之前的cookies已经失效。 我们继续看【headers】,看看还有没有哪些有关登录的参数。
咦拉到【form data】可以看到5个参数 log和pwd显然是我们的账号和密码wp-submit猜一下就知道是登录的按钮redirect_to后面带的链接是我们登录后会跳转到的这个页面网址testcookie我们不知道是什么。
关于登录的参数我们找到了。现在可以尝试开始写代码向服务器发起登录请求。
import requests
#引入requests。
url https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php
#把登录的网址赋值给url。
headers {
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
}
#加请求头前面有说过加请求头是为了模拟浏览器正常的访问避免被反爬虫。
data {
log: spiderman, #写入账户
pwd: crawler334566, #写入密码
wp-submit: 登录,
redirect_to: https://wordpress-edu-3autumn.localprod.oc.forchange.cn,
testcookie: 1
}
#把有关登录的参数封装成字典赋值给data。
login_in requests.post(url,headersheaders,datadata)
#用requests.post发起请求放入参数请求登录的网址、请求头和登录参数然后赋值给login_in。
print(login_in)
#打印login_in你可以运行一下这个代码。
运行结果
Response [200]Response [200]是返回了200的状态码意味着服务器接收到并响应了登录请求。
不过我们的目标是要往博客的文章里发表评论所以成功登录只是第一步。
怎么发表评论我们现在还不知道。那就先分析看看“正常人”发表评论浏览器会发送什么请求。
行我们在《未来已来一——技术变革》这篇文章下面自己写一条评论发表记得不要关闭检查工具这样才能看到请求的记录。 我按“正常人”的操作写了一条“纯属测试”的评论点击发表。
Network里迅速加载出很多请求点开【wp-comments-post.php】看headers发现我刚刚发表的评论就藏在这里。 comment是评论内容submit是发表评论的按钮另外两个参数我们看不懂不过没关系我们知道它们都是和评论有关的参数就行。
你还会发现【wp-comments-post.php】的数据并没有藏在XHR中而是放在了Other里。原因是我们搭建网站时就写在了Other里但常规情况下大部分网站都会把这样的数据存储在XHR里比如知乎的回答。 我们想要发表博客评论首先得登录其次得提取和调用登录的cookies然后还需要评论的参数才能发起评论的请求。
现在登录的代码我们前面写好了评论的参数我们刚也找到了就差提取和调用登录的cookies。
我会先带你写一遍发表评论的代码要认真看注释
import requests
#引入requests。
url https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php
#把请求登录的网址赋值给url。
headers {
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
}
#加请求头前面有说过加请求头是为了模拟浏览器正常的访问避免被反爬虫。
data {
log: spiderman, #写入账户
pwd: crawler334566, #写入密码
wp-submit: 登录,
redirect_to: https://wordpress-edu-3autumn.localprod.oc.forchange.cn,
testcookie: 1
}
#把有关登录的参数封装成字典赋值给data。
login_in requests.post(url,headersheaders,datadata)
#用requests.post发起请求放入参数请求登录的网址、请求头和登录参数然后赋值给login_in。
cookies login_in.cookies
#提取cookies的方法调用requests对象login_in的cookies属性获得登录的cookies并赋值给变量cookies。url_1 https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.php
#我们想要评论的文章网址。
data_1 {
comment: input(请输入你想要发表的评论),
submit: 发表评论,
comment_post_ID: 13,
comment_parent: 0
}
#把有关评论的参数封装成字典。
comment requests.post(url_1,headersheaders,datadata_1,cookiescookies)
#用requests.post发起发表评论的请求放入参数文章网址、headers、评论参数、cookies参数赋值给comment。
#调用cookies的方法就是在post请求中传入cookiescookies的参数。
print(comment.status_code)
#打印出comment的状态码若状态码等于200则证明我们评论成功。提取cookies的方法请看第19的代码调用requests对象的cookies属性获得登录的cookies。
调用cookies的方法请看第31行的代码在post请求中传入cookiescookies的参数。
最后之所以加一行打印状态码的代码是想运行整个代码后能立马判断出评论到底有没有成功发表。只要状态码等于200就说明服务器成功接收并响应了我们的评论请求。
多解释一句登录的cookies其实包含了很多名称和值真正能帮助我们发表评论的cookies只是取了登录cookies中某一小段值而已。所以登录的cookies和评论成功后你在【wp-comments-post.php】里的headers面板中看到的cookies是不一致的。 总结一下发表博客评论就三个重点—— 上面的代码相信你已经能看明白那就敲一遍代码练练手。请养成一个好的习惯认真手打代码不要复制黏贴。
刷新文章的页面你应该能找到自己的评论。
虽然我们已经成功发表了评论但我们的项目到这里还没有结束。因为这个代码还有优化的空间仅仅是完成还不够更优雅才是我们该有的追求。
如果要继续优化这个代码的话我们需要理解一个新的概念——session会话。
session及其用法
所谓的会话你可以理解成我们用浏览器上网到关闭浏览器的这一过程。session是会话过程中服务器用来记录特定用户会话的信息。
比如你打开浏览器逛购物网页的整个过程中浏览了哪些商品在购物车里放了多少件物品这些记录都会被服务器保存在session中。 如果没有session可能会出现这样搞笑的情况你加购了很多商品在购物车打算结算时发现购物车空无一物Σ(っ°Д°;)っ因为服务器根本没有帮你记录你想买的商品。
对了session和cookies的关系还非常密切——cookies中存储着session的编码信息session中又存储了cookies的信息。
当浏览器第一次访问购物网页时服务器会返回set cookies的字段给浏览器而浏览器会把cookies保存到本地。
等浏览器第二次访问这个购物网页时就会带着cookies去请求而因为cookies里带有会话的编码信息服务器立马就能辨认出这个用户同时返回和这个用户相关的特定编码的session。
这也是为什么你每次重新登录购物网站后你之前在购物车放入的商品并不会消失的原因。因为你在登录时服务器可以通过浏览器携带的cookies找到保存了你购物车信息的session。
呼session的概念以及和cookies的关系我们搞清楚了终于可以开始优化发表博客评论的代码。
既然cookies和session的关系如此密切那我们可不可以通过创建一个session来处理cookies
不知道。那就翻阅requests的官方文档找找看有没有这样的方法能让我们创建session来处理cookies。 在requests的高级用法里还真有这样的方法太棒了
优化后的发表评论的代码如下重点看有注释的代码
import requests
#引用requests。
session requests.session()
#用requests.session()创建session对象相当于创建了一个特定的会话帮我们自动保持了cookies。
url https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php
headers {
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
}
data {log:input(请输入账号), #用input函数填写账号和密码这样代码更优雅而不是直接把账号密码填上去。pwd:input(请输入密码),wp-submit:登录,redirect_to:https://wordpress-edu-3autumn.localprod.oc.forchange.cn,testcookie:1
}
session.post(url,headersheaders,datadata)
#在创建的session下用post发起登录请求放入参数请求登录的网址、请求头和登录参数。url_1 https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.php
#把我们想要评论的文章网址赋值给url_1。
data_1 {
comment: input(请输入你想要发表的评论),
submit: 发表评论,
comment_post_ID: 13,
comment_parent: 0
}
#把有关评论的参数封装成字典。
comment session.post(url_1,headersheaders,datadata_1)
#在创建的session下用post发起评论请求放入参数文章网址请求头和评论参数并赋值给comment。
print(comment)
#打印comment我们再运行代码看看账号spiderman;密码crawler334566。
运行结果
请输入账号spiderman
请输入密码crawler334566
请输入你想要发表的评论session来啦
Response [200]这么一细看其实这个代码并没有特别大的优化我们每次还是需要输入账号密码登录才能发表评论。
可不可以有更优化的方案
答案可以有cookies能帮我们保存登录的状态那我们就在第一次登录时把cookies存储下来等下次登录再把存储的cookies读取出来这样就不用重复输入账号密码了。
存储cookies
我们先把登录的cookies打印出来看看请运行下面的代码账号spiderman;密码crawler334566。
import requests
session requests.session()
url https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php
headers {
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
}
data {log:input(请输入账号),pwd:input(请输入密码),wp-submit:登录,redirect_to:https://wordpress-edu-3autumn.localprod.oc.forchange.cn,testcookie:1
}
session.post(url,headersheaders,datadata)
print(type(session.cookies))
#打印cookies的类型,session.cookies就是登录的cookies
print(session.cookies)
#打印cookies运行结果
请输入账号spiderman
请输入密码crawler334566
class requests.cookies.RequestsCookieJar
RequestsCookieJar[Cookie 328dab9653f517ceea1f6dfce2255032f3f71306a581dbf4a426944494055956 for wordpress-edu-3autumn.localprod.oc.forchange.cn/, Cookie wordpress_logged_in_dc180e44ec13b4c601eeef962104f0fespiderman%7C1617286412%7CsSzgQLtENTf4nZtgtSETQkzcaZlLou3ukRh3JmoGsLW%7Ce29e89741fee9b05cea4ce78cbf35b366db1db09cf59935c18be2f950895e1e9 for wordpress-edu-3autumn.localprod.oc.forchange.cn/, Cookie wordpress_test_cookieWPCookiecheck for wordpress-edu-3autumn.localprod.oc.forchange.cn/, Cookie wordpress_sec_dc180e44ec13b4c601eeef962104f0fespiderman%7C1617286412%7CsSzgQLtENTf4nZtgtSETQkzcaZlLou3ukRh3JmoGsLW%7C2194bf4eb1a74fa65aa486c146fea1dec68882647fcd3645b42d387b8eedd4c6 for wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-admin, Cookie wordpress_sec_dc180e44ec13b4c601eeef962104f0fespiderman%7C1617286412%7CsSzgQLtENTf4nZtgtSETQkzcaZlLou3ukRh3JmoGsLW%7C2194bf4eb1a74fa65aa486c146fea1dec68882647fcd3645b42d387b8eedd4c6 for wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-content/plugins]RequestsCookieJar是cookies对象的类cookies本身的内容有点像一个列表里面又有点像字典的键与值具体的值我们看不懂也不需要弄懂。
那怎么把cookies存储下来能不能用文件读写的方式把cookies存储成txt文件
可是txt文件存储的是字符串刚刚打印出来的cookies并不是字符串。那有没有能把cookies转成字符串的方法
对了在第4关我们知道json模块能把字典转成字符串。我们或许可以先把cookies转成字典然后再通过json模块转成字符串。这样就能用open函数把cookies存储成txt文件。 感觉这样的思路应该可以实现。通过使用搜索引擎翻阅官方文档的方式就能找到了把cookies转化成字典的方法和json模块的使用方法。 把cookies存储成txt文件的代码如下有注释的代码要认真看
import requests,json
#引入requests和json模块。
session requests.session()
url https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php
headers {
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
}
data {
log: input(请输入你的账号:),
pwd: input(请输入你的密码:),
wp-submit: 登录,
redirect_to: https://wordpress-edu-3autumn.localprod.oc.forchange.cn,
testcookie: 1
}
session.post(url, headersheaders, datadata)cookies_dict requests.utils.dict_from_cookiejar(session.cookies)
#把cookies转化成字典。
print(cookies_dict)
#打印cookies_dict
cookies_str json.dumps(cookies_dict)
#调用json模块的dumps函数把cookies从字典再转成字符串。
print(cookies_str)
#打印cookies_str
f open(cookies.txt, w)
#创建名为cookies.txt的文件以写入模式写入内容。
f.write(cookies_str)
#把已经转成字符串的cookies写入文件。
f.close()
#关闭文件。提示以上存储cookies的方法并非最简单的方法选取这个方法是因为它容易理解。如果你看完了请运行代码账号spiderman;密码crawler334566。
运行结果
请输入你的账号:spiderman
请输入你的密码:334566
{328dab9653f517ceea1f6dfce2255032: 75f2182297fefd0aa3314b37694c637d, wordpress_test_cookie: WPCookiecheck}
{328dab9653f517ceea1f6dfce2255032: 75f2182297fefd0aa3314b37694c637d, wordpress_test_cookie: WPCookiecheck}运行代码后确实证明了cookies可以被转成字典也可以通过json模块把字典格式的cookies转成字符串。
这样一来cookies的存储我们搞定了但还得搞定cookies的读取才能解决每次发表评论都得先输入账号密码的问题。
读取cookies
我们存储cookies时是把它先转成字典再转成字符串。读取cookies则刚好相反要先把字符串转成字典再把字典转成cookies本来的格式。 读取cookies的代码如下
cookies_txt open(cookies.txt, r)
#以reader读取模式打开名为cookies.txt的文件。
cookies_dict json.loads(cookies_txt.read())
#调用json模块的loads函数把字符串转成字典。
cookies requests.utils.cookiejar_from_dict(cookies_dict)
#把转成字典的cookies再转成cookies本来的格式。
session.cookies cookies
#获取cookies就是调用requests对象session的cookies属性。终于cookies的存储与读取我们都弄好了。
最后我们可以把代码优化成如果程序能读取到cookies就自动登录发表评论如果读取不到就重新输入账号密码登录再评论。
再一次优化的代码如下
import requests,json
session requests.session()
#创建会话。
headers {
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
}
#添加请求头避免被反爬虫。
try:
#如果能读取到cookies文件执行以下代码跳过except的代码不用登录就能发表评论。cookies_txt open(cookies.txt, r)#以reader读取模式打开名为cookies.txt的文件。cookies_dict json.loads(cookies_txt.read())#调用json模块的loads函数把字符串转成字典。cookies requests.utils.cookiejar_from_dict(cookies_dict)#把转成字典的cookies再转成cookies本来的格式。session.cookies cookies#获取cookies就是调用requests对象session的cookies属性。except FileNotFoundError:
#如果读取不到cookies文件程序报“FileNotFoundError”找不到文件的错则执行以下代码重新登录获取cookies再评论。url https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php#登录的网址。data {log: input(请输入你的账号:),pwd: input(请输入你的密码:),wp-submit: 登录,redirect_to: https://wordpress-edu-3autumn.localprod.oc.forchange.cn,testcookie: 1}#登录的参数。session.post(url, headersheaders, datadata)#在会话下用post发起登录请求。cookies_dict requests.utils.dict_from_cookiejar(session.cookies)#把cookies转化成字典。cookies_str json.dumps(cookies_dict)#调用json模块的dump函数把cookies从字典再转成字符串。f open(cookies.txt, w)#创建名为cookies.txt的文件以写入模式写入内容f.write(cookies_str)#把已经转成字符串的cookies写入文件f.close()#关闭文件url_1 https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.php
#文章的网址。
data_1 {
comment: input(请输入你想评论的内容),
submit: 发表评论,
comment_post_ID: 13,
comment_parent: 0
}
#评论的参数。
comment session.post(url_1,headersheaders,datadata_1)
#在创建的session下用post发起评论请求放入参数文章网址请求头和评论参数并赋值给comment。
print(comment.status_code)
#打印comment的状态码你可以体验一下这个代码感受优化后的效果账号spiderman;密码crawler334566。
运行结果
请输入你的账号:spiderman
请输入你的密码:334566
请输入你想评论的内容来啦老弟
403这样是解决了每一次都要重复输入账号密码的问题但这个代码还存在一个缺陷——并没有解决cookies会过期的问题。
cookies是否过期我们可以通过最后的状态码是否等于200来判断。但更好的解决方法应该在代码里加一个条件判断如果cookies过期就重新获取新的cookies。
所以更完整以及面向对象的代码应该是下面这样的
import requests, json
session requests.session()
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36}def cookies_read():cookies_txt open(cookies.txt, r)cookies_dict json.loads(cookies_txt.read())cookies requests.utils.cookiejar_from_dict(cookies_dict)return (cookies)# 以上4行代码是cookies读取。def sign_in():url https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.phpdata {log: input(请输入你的账号),pwd: input(请输入你的密码),wp-submit: 登录,redirect_to: https://wordpress-edu-3autumn.localprod.oc.forchange.cn,testcookie: 1}session.post(url, headersheaders, datadata)cookies_dict requests.utils.dict_from_cookiejar(session.cookies)cookies_str json.dumps(cookies_dict)f open(cookies.txt, w)f.write(cookies_str)f.close()# 以上5行代码是cookies存储。def write_message():url_2 https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.phpdata_2 {comment: input(请输入你要发表的评论),submit: 发表评论,comment_post_ID: 13,comment_parent: 0}return (session.post(url_2, headersheaders, datadata_2))#以上9行代码是发表评论。try:session.cookies cookies_read()
except FileNotFoundError:sign_in()num write_message()
if num.status_code 200:print(成功啦)
else:sign_in()num write_message()复习
下面是这一关的复习
cookies是服务器为了标记用户存储在用户本地的数据它里面也保存了用户的登录信息同时它有一定的时效性过期就会失效。 session是会话过程中服务器用来记录特定用户会话的信息。 session和cookies的关系cookies里带有session的编码信息服务器可以通过cookies辨别用户同时返回和这个用户相关的特定编码的session。 请认真把下面的代码回顾一遍
import requests,json
session requests.session()
#创建会话。
headers {
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
}
#添加请求头避免被反爬虫。
try:
#如果能读取到cookies文件执行以下代码跳过except的代码不用登录就能发表评论。cookies_txt open(cookies.txt, r)#以reader读取模式打开名为cookies.txt的文件。cookies_dict json.loads(cookies_txt.read())#调用json模块的loads函数把字符串转成字典。cookies requests.utils.cookiejar_from_dict(cookies_dict)#把转成字典的cookies再转成cookies本来的格式。session.cookies cookies#获取会话下的cookiesexcept FileNotFoundError:
#如果读取不到cookies文件程序报“FileNotFoundError”找不到文件的错则执行以下代码重新登录获取cookies再评论。url https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php#登录的网址。data {log: input(请输入你的账号:),pwd: input(请输入你的密码:),wp-submit: 登录,redirect_to: https://wordpress-edu-3autumn.localprod.oc.forchange.cn,testcookie: 1}#登录的参数。session.post(url, headersheaders, datadata)#在会话下用post发起登录请求。cookies_dict requests.utils.dict_from_cookiejar(session.cookies)#把cookies转化成字典。cookies_str json.dumps(cookies_dict)#调用json模块的dump函数把cookies从字典再转成字符串。f open(cookies.txt, w)#创建名为cookies.txt的文件以写入模式写入内容f.write(cookies_str)#把已经转成字符串的cookies写入文件f.close()#关闭文件url_1 https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-comments-post.php
#文章的网址。
data_1 {
comment: input(请输入你想评论的内容),
submit: 发表评论,
comment_post_ID: 13,
comment_parent: 0
}
#评论的参数。
session.post(url_1, headersheaders, datadata_1)
#在会话下用post发起评论请求。最后还想和你多说几句——
其实计算机之所以需要cookies和session是因为HTTP协议是无状态的协议。
何为无状态就是一旦浏览器和服务器之间的请求和响应完毕后两者会立马断开连接也就是恢复成无状态。
这样会导致服务器永远无法辨认也记不住用户的信息像一条只有7秒记忆的金鱼。是cookies和session的出现才破除了web发展史上的这个难题。
cookies不仅仅能实现自动登录因为它本身携带了session的编码信息网站还能根据cookies记录你的浏览足迹从而知道你的偏好只要再加以推荐算法就可以实现给你推送定制化的内容。
比如淘宝会根据你搜索和浏览商品的记录给你推送符合你偏好的商品增加你的购买率。cookies和session在这其中起到的作用可谓举足轻重。
看来一块小饼干的作用也不可小觑。
恭喜顺利通关我们下一关再见