如何使用cookie信息,完成自动登录

在做爬虫任务的时候,我们常常会遇到很多网页必须登录后,才可以开放某些页面。所以登录是爬取网页的第一步。但是,通过post表单(包含用户名和密码)的方法,对于那些不需要输入比较复杂的验证码的网页,可以使用正则表达式将验证码和验证码的ID匹配得出,然后实现自动化登录。但是,现在多部分的网页都是需要输入图片验证码的,所以必须得通过人工的识别图片然后输入验证码。当然,你也可以开发一个深度学习算法,将下载下来的验证码图片进行识别,然后转换为数字进行输入,但是这样就大大的提高了算法的成本,本来你只是要爬取一些简单的信息,却的开发一个实用的验证码识别算法,实属划不来。所以,我们可以通过使用cookie信息,完成自动化输入,而且每次访问网站的时候都不需要输入账号,密码和验证码等信息,相当于你在浏览器上勾选了记住我和自动登录的选项。下面就让我们开始学习如何使用cookie信息完成自动的登录,以爬取豆瓣网内容为例。

一.输入验证码登录

首先,我给出一个不使用cookie信息来登录的例子代码

import requests
import html5lib
import re
from bs4 import BeautifulSoup

s = requests.Session()
url_login = 'http://accounts.douban.com/login' #该网址通过跟踪登录信息可以查看到
#登录的表单
formdata = {
    'redir':'https://www.douban.com',#登录后直接跳转的页面
    'form_email': '2324973098.com', #账户邮箱名(这是我自己乱写的邮箱号码,使用时请换成你自己的邮箱号)
    'form_password': '12345678!',#登录密码(这是我自己乱写的密码,使用时请换成你自己的密码)
    'login': u'登陆'
}
#登录的头信息,为了模拟浏览器登录,属于固定形式
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}

r = s.post(url_login, data = formdata, headers = headers)
content = r.text
soup = BeautifulSoup(content, 'html5lib')#使用HTML5进行解析网页
captcha = soup.find('img', id = 'captcha_image')#获取验证码图的链接
#判断是否需要验证码,需要则人工输入
if captcha:
    captcha_url = captcha['src']
    re_captcha_id = r'<input type="hidden" name="captcha-id" value="(.*?)"/'#找出验证码的ID,都可以通过跟踪登录过程知道
    captcha_id = re.findall(re_captcha_id, content)
    print(captcha_id)
    print(captcha_url)
    captcha_text = input('Please input the captcha:')#通过将输出的验证码图片网页链接复制到浏览器打开,然后观察验证码,然后输入登录
    formdata['captcha-solution'] = captcha_text
    formdata['captcha-id'] = captcha_id   #加入验证码的信息后,从新构造表单,然后申请登录
    r = s.post(url_login, data = formdata, headers = headers)
with open('contacts.txt', 'w+', encoding = 'utf-8') as f:

    f.write(r.text)

二.使用cookie信息登录

步骤:

1.使用你的账号和密码登录豆瓣主页,并且在登录页勾选记住我的选项。


2.打开浏览器,并按F12键,调出开发者工具,找到network这一选项,选中all,如下图所示:


3.在该业中输入豆瓣主页https://www.douban.com/,然后便可以在下面的监视框内看到登录的信息,如下图:


4.找到最前面的一项,显示的是www.douban.com,单击后,点击header,如下图:


5.在header下面找到cookie信息便可,然后将cookie信息复制到代码中。如下图:



为了保护我的豆瓣的账户信息,所以这里cookie信息进行遮蔽,还望谅解。

代码如下:

import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}

cookies = {'cookie': 'bid=10gz8L7vrjI; __yadk_uid=QTSUUYvkbEDpprCxnGHo2vDkzhjkNgWB; ll="108288"; 608; ue="2314963088@qq.com"; push_noty_num=0; push_doumail_num=0; __utmv=30149280.17557; __utmt=1; dbcl2="175570305:1c9NM2YiWlg";ue="2314963088@qq.com"; push_noty_num=0; push_doumail_num=0; __utmv=30149280.17557; __utmt=1; dbcl2="175570305:1c9NM2YiWlg"; ck=Yiiv; _pk_id.100001.8cb4=3997ae079664ac75.1508600267.12.1521361971.1520843669.; __utmb=30149280.11.10.1521360343'}

r = requests.get(url, cookies = cookies, headers = headers)
# print(r.text)
with open('douban_2.txt', 'wb+') as f:

    f.write(r.content)


到这里为止,你就完成了使用cookie的所有步骤,以后想再次访问该网站则不在需要输入验证码等信息了。

1. 获取cookie 首先,我们需要使用Selenium启动浏览器,并打开我们要自动登录的网站。 ```python from selenium import webdriver # 启动浏览器 driver = webdriver.Chrome() # 打开网站 driver.get('https://www.example.com/') ``` 然后,我们可以使用`driver.get_cookies()`方法获取当前页面的所有cookie。 ```python # 获取所有cookie cookies = driver.get_cookies() # 输出所有cookie for cookie in cookies: print(cookie) ``` 输出的结果类似于: ``` {'domain': 'www.example.com', 'expiry': 1641947537, 'httpOnly': False, 'name': 'SESSIONID', 'path': '/', 'secure': False, 'value': '1234567890'} {'domain': 'www.example.com', 'expiry': 1641947537, 'httpOnly': False, 'name': 'username', 'path': '/', 'secure': False, 'value': 'testuser'} {'domain': 'www.example.com', 'expiry': 1641947537, 'httpOnly': False, 'name': 'password', 'path': '/', 'secure': False, 'value': 'testpassword'} ``` 其中,每个cookie都是一个字典,包含以下键值对: - `domain`:cookie所属的域名。 - `expiry`:cookie的过期时间(以Unix时间戳表示)。 - `httpOnly`:指示浏览器是否只能通过HTTP或HTTPS协议访问cookie。 - `name`:cookie的名称。 - `path`:cookie的路径。 - `secure`:指示浏览器是否只能通过HTTPS协议访问cookie。 - `value`:cookie的值。 2. 使用cookie完成自动登录 获取到cookie后,我们可以使用`driver.add_cookie()`方法将cookie添加到浏览器中。然后,我们可以重新打开网站,浏览器会自动使用我们添加的cookie进行登录。 ```python # 添加cookie driver.add_cookie({'name': 'SESSIONID', 'value': '1234567890'}) driver.add_cookie({'name': 'username', 'value': 'testuser'}) driver.add_cookie({'name': 'password', 'value': 'testpassword'}) # 重新打开网站 driver.get('https://www.example.com/') ``` 这样,我们就完成自动登录功能。 完整代码如下: ```python from selenium import webdriver # 启动浏览器 driver = webdriver.Chrome() # 打开网站 driver.get('https://www.example.com/') # 获取所有cookie cookies = driver.get_cookies() # 输出所有cookie for cookie in cookies: print(cookie) # 添加cookie driver.add_cookie({'name': 'SESSIONID', 'value': '1234567890'}) driver.add_cookie({'name': 'username', 'value': 'testuser'}) driver.add_cookie({'name': 'password', 'value': 'testpassword'}) # 重新打开网站 driver.get('https://www.example.com/') ``` 注意事项: - 获取和使用cookie的代码必须在同一个浏览器实例中执行。 - 添加cookie时,必须指定cookie的名称和值。其他键值对是可选的,但建议尽量指定。 - 如果添加的cookie与网站当前存在的cookie冲突,可能会导致自动登录失败。此时,可以尝试清除浏览器缓存或使用不同的浏览器实例。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值