三、cookies与session的使用(解决登录获取数据问题)

一、cookies

cookies就是登录之后网站记住你的登录消息,为下一次发送请求简化流程
要获取cookies就要明白怎么使用post方法

import requests
#引入requests。
url = ' https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php'
#把请求登录的网址赋值给url。
headers = {
'User-Agent':'```'
}
#加请求头,前面有说过加请求头是为了模拟浏览器正常的访问,避免被反爬虫。
data = {
'log': 'spiderman',  #写入账户
'pwd': 'crawler334566',  #写入密码
'wp-submit': '登录',
'redirect_to': 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-admin/',
'testcookie': '1'
}
#把有关登录的参数封装成字典,赋值给data。
login_in = requests.post(url,headers=headers,data=data)
#用requests.post发起请求,放入参数:请求登录的网址、请求头和登录参数,然后赋值给login_in。
cookies = login_in.cookies
#提取cookies的方法:调用requests对象(login_in)的cookies属性获得登录的cookies,并赋值给变量cookies。

以上就是在做登录操作,其中使用post方法携带登录参数,返回中带有cookies

cookies = login_in.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,headers=headers,data=data_1,cookies=cookies)
#用requests.post发起发表评论的请求,放入参数:文章网址、headers、评论参数、cookies参数,赋值给comment。
#调用cookies的方法就是在post请求中传入cookies=cookies的参数。
print(comment.status_code)
#打印出comment的状态码,若状态码等于200,则证明我们评论成功。

二、session会话保持

所谓的会话,你可以理解成我们用浏览器上网,到关闭浏览器的这一过程。session是会话过程中,服务器用来记录特定用户会话的信息。
session和cookies的关系非常密切——cookies中存储着session的编码信息,session中又存储了cookies的信息。
使用session后的优化评论代码如下

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':'```'
}
data = {
    'log':input('请输入账号:'), #用input函数填写账号和密码,这样代码更优雅,而不是直接把账号密码填上去。
    'pwd':input('请输入密码:'),
    'wp-submit':'登录',
    'redirect_to':'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-admin/',
    'testcookie':'1'
}
session.post(url,headers=headers,data=data)
#在创建的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,headers=headers,data=data_1)
#在创建的session下用post发起评论请求,放入参数:文章网址,请求头和评论参数,并赋值给comment。
print(comment)
#打印comment

实际中需要保存cookies的,这时需要用到文件存储及转化方法

在这里插入图片描述

存储
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_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过期的问题,可以做返回status_code是否为200的判断,以下是一个完整示例代码

import requests, json
session = requests.session()
headers = {
    'User-Agent': '```'}

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.php'
    data = {'log': input('请输入你的账号'),
            'pwd': input('请输入你的密码'),
            'wp-submit': '登录',
            'redirect_to': 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-admin/',
            'testcookie': '1'}
    session.post(url, headers=headers, data=data)
    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.php'
    data_2 = {
        'comment': input('请输入你要发表的评论:'),
        'submit': '发表评论',
        'comment_post_ID': '13',
        'comment_parent': '0'
    }
    return (session.post(url_2, headers=headers, data=data_2))
    #以上9行代码,是发表评论。

try:
    session.cookies = cookies_read()
except FileNotFoundError:
    sign_in()
    session.cookies = cookies_read()

num = write_message()
if num.status_code == 200:
    print('成功啦!')
else:
    sign_in()
    session.cookies = cookies_read()
    num = write_message()
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python登录获取cookies,可以使用requests库来实现。具体步骤如下: 1. 导入requests库 ```python import requests ``` 2. 构造登录表单数据 ```python data = { 'email': '你的邮箱', 'password': '你的密码' } ``` 3. 发送登录请求,获取cookies ```python session = requests.Session() response = session.post('http://www.renren.com/PLogin.do', data=data) cookies = session.cookies.get_dict() ``` 4. 使用cookies爬取人人网数据 ```python headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } url = 'http://www.renren.com/xxxxx' # 你要爬取的页面链接 response = requests.get(url, headers=headers, cookies=cookies) ``` 其中,'xxxxx'是你要爬取的页面链接的后缀,需要根据实际情况进行替换。另外,headers是请求头,用于模拟浏览器访问,也需要根据实际情况进行修改。 ### 回答2: 在 python 中使用 cookies 登录人人网,可以通过以下步骤实现。 1. 首先,通过 requests 库发送登录请求,获取到登录页面的源代码。该源代码中应包含登录所需的各种参数,如表单的各个字段、提交 URL 等。 2. 接着,从源代码中提取出登录时需要提交的表单数据,并将其封装成一个 Python 字典。其中,用户名和密码字段是必要的。若还需要其他字段,则需要进一步分析源代码。 3. 使用该字典向提交 URL 发送 POST 请求,实现登录登录成功后,服务器会返回一个名为 cookies 的令牌。此时,需要通过 requests.Session() 创建一个会话对象,并将该令牌存入其中。 4. 使用该会话对象发起 GET 或 POST 请求,即可带上存储在 cookies 中的令牌,从而实现对人人网的数据抓取。 5. 对于一些特殊情况,比如人人网反爬虫机制比较严格等,可能需要进行更加复杂的操作,比如模拟鼠标行为、使用代理 IP 等来规避反爬虫措施。 总的来说,利用 Python 来登录并获取人人网数据,需要熟练掌握 requests、bs4、re 等基本模块,同时还需要对网页源代码有一定的分析和解析能力。此外,还需要具备良好的编程能力和耐心,不断测试和尝试,逐渐掌握更加高效和稳定的爬虫方式。 ### 回答3: 人人网是中国最大的社交网站之一,用户数量众多。如果我们想要获取这些用户的数据,就需要通过爬虫程序登录人人网,获取登录后的cookies,然后通过cookies实现我们所需数据的爬取。 Python登录获取cookies的过程分为以下几个步骤: 第一步,发送登录请求。在Python中,我们可以通过requests模块实现登录操作,使用POST方法向人人网发送用户账号和密码,模拟用户登录操作。 第二步,获取cookies。在用户登录成功之后,我们需要获取登录成功后响应中的cookies信息。可以通过r.cookies.get_dict()方法获取cookies的参数,再将cookies的参数加入请求头信息中,这样就能够模拟用户登录。 第步,爬取数据。在获取到cookies后,我们可以通过requests模块发送request请求,爬取用户所需的数据。这个过程与普通的爬取过程相同,只不过在请求头中需要携带上面获取到的cookies信息。 需要注意,我们在爬取人人网数据时,需要遵循相关的爬虫道德规范,不要进行暴力爬取,否则会被人人网封禁IP。同时,人人网限制了用户的数据爬取,只允许爬取公开数据,而不允许爬取用户的隐私数据。 总之,通过Python登录获取人人网的cookies,可以实现对人人网用户数据的爬取。当然,在使用爬虫程序的时候,我们应该遵循相关的爬虫道德规范,避免被封禁IP,同时也应该保护用户的隐私安全。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值