步骤:1、打开博客园登录界面,抓取登录前的headers
2、登录博客园后,抓取登录后的cookies信息,增加了2项cookie。更新到cookie中,即完成登录。
3、新建随笔,保存为草稿。抓包,通过WebForms可以看到存草稿请求的body,把body信息传给post请求。
因为保存草稿箱成功之后,重定向一个url地址,里面带有postId这个参数,所以要先抓取草稿的postid。
4、删除草稿,发现body就是postid参数。
代码如下:
# coding:utf-8
import requests
import urllib3
#禁用安全请求警告
urllib3.disable_warnings()
def login(s, url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0" ,
}
#发送一次get请求打开url
r = s.get(url, headers=headers, verify=False)
#获取登录前的cookie
c=requests.cookies.RequestsCookieJar()
#插入用户密码的cookie c.set(".CNBlogsCookie","2DAE0BF85DA417E1EA06A8D7193D46B9D470A2833540FB57D7EFC5CAC8E195A050AD021EE8DA02C23C82F9D434AB388D6581E640892999A0F68C5957225BF66E9B2F31A5E89BF03E8BE8AB8E95B9465197A00B9F")
c.set(".Cnblogs.AspNetCore.Cookies","CfDJ8FHXRRtkJWRFtU30nh_M9mCOUDJ_0cBGFLj8p2QL3oRd3wBUyyslV6IWpnIS2rRu6l5HxY9-lpGnma-CMd4AqKHD1rnytSxhjZlfC-2VpTebUg3Q7oRdleBjNzXWddMrTr_uCeAP7kcaLd-J3Z6EfYjrIrvwDzsjSbWG1n7vU9eimyuZ-69t9-Q9-Jc6gtXq6dohh7jj1v_8IqFLfk6hDMsQx03jNRM-7DEcfWNM1IqWMISIff3-qIazmcR7LyA-RkABczujkrdPqq7m8orA_ZyuQSLFSXDCOBeEAbAQzs-27IagHHNJLUwbH0FwxfIwrw")
#更新cookie
s.cookies.update(c)
print(s.cookies)
def save_box(s, url2, title, body_data):
body = {"__VIEWSTATE":"",
"__VIEWSTATEGENERATOR":"FE27D343",
"Editor$Edit$txbTitle":title, #编辑内容的标题用title参数
"Editor$Edit$EditorBody":body_data, #正文用body_data参数
"Editor$Edit$Advanced$ckbPublished":"on",
"Editor$Edit$Advanced$chkDisplayHomePage":"on",
"Editor$Edit$Advanced$chkComments":"on",
"Editor$Edit$Advanced$chkMainSyndication":"on",
"Editor$Edit$lkbDraft":"存为草稿"
}
r2 = s.post(url2, data=body, verify=False)
print(r2.url)
return r2.url
def get_postid(u):
'''第三步:正则表达式提取参数,(.+?)匹配第一个字符后立即返回'''
import re
postid=re.findall("postid=(.+?)&",u)
print(postid) #这里是只有1个对象的list
if len(postid)<1:
return ''
else:
return postid[0] #这才是要提取的字符串
def delete_box(s, url3, postid):
'''第四步:删除草稿箱'''
json3={"postId":postid}
r3=s.post(url3, json=json3, verify=False)
print(r3.json()) #返回一个python字典
if __name__=='__main__':
url = "https://passport.cnblogs.com/user/signin"
#创建一个全局的session
s=requests.session()
login(s,url)
url2="https://i.cnblogs.com/EditPosts.aspx?opt=1"
u=save_box(s,url2,"标题:1111111","正文内容:22222222")
postid = get_postid(u)
url3="https://i.cnblogs.com/post/delete"
delete_box(s, url3, postid)