Python爬虫基础-模拟登陆
admin
2023-07-30 20:52:47
0

为什么我们要让爬虫模拟登陆呢?

  1. 有些内容只有登陆才能进行爬取,如知乎,不登录的主页只能看到注册和登陆 ;
  2. 你想爬取自己的个人信息

有什么方法呢?

  1. cookie
    在互联网发展的早期,由于大家的服务器都不是太好,所以服务端不会记住你的个人信息,这会增加服务器的压力。因此早期的连接都是一次性的,服务器在不会记得你什么时候来过,也不知道你做了什么。但是随着服务器的升级换代,淘宝这类网站需要记住你的个人信息,这样你下次访问的时候可以继续上次的工作。但是http协议依旧保持了无状态的特性,cookies应运而生。cookies在访问服务器后会记录在浏览器上,这样就可以在客户端下次访问的时候想起它是谁了。

  2. HTTP持久连接
    在没有持久连接之前,为获取每一个URL指定的资源都必须建立一个独立额TCP连接,一方面加重了HTTP服务器的负担;另一方面由于服务器不会记住客服端,导致我们需要每一个请求都要执行登录操作。但是有了HTTP持久连接后,我们对同一个主机的多次请求会使用同一个TCP连接。因此登录后就可以保持这类状态进行请求操作。

实现方法!

针对方法1,我们只要从在浏览器获取cookie,然后带着cookie进行访问就行了,如下:

  1. 利用chrome的开发者工具获取cookies


    获取cookies

  2. 填写cookies cookies = {\'cookie\':\'红框部分\'}

  3. 带cookies发起请求:html = requests.get(url,cookies=cookies).content

针对方法2,我们使用requests的Session类进行持久连接,就直接上代码了哦

#导入必要的库
import requests
from bs4 import BeautifulSoup
url = \'https://www.zhihu.com/#signin\'
session = requests.Session() #实例化Session
wb_data = session.get(url).text
soup = BeautifulSoup(wb_data,\'lxml\')
# 填写登录表单
xsrf = soup.select(\'input[value]\')[-1].get(\'value\')
data = {
    \'_xsrf\': xsrf,
    \'password\': \'your password\',
    \'remember_me\': \'true\',
    \'email\': \'your email\'
}
# 提交表单
log_post =session.post(\'http://www.zhihu.com/login/email\', data=data)
url = \'https://www.zhihu.com/\'
test = session.get(url)
wb_data = BeautifulSoup(test.text, \'lxml\')
# 检验是否成功登录
wb_data.select(\'#feed-0 > div.feed-item-inner > div.feed-main > div.feed-content > h2 > a\')

结语

HTTP持久链接和Cookies其实没有冲突,虽然我说是两种方法,但是你可以在使用cookies免提交表单登陆的时使用Session,这样只需要第一次get的时候带上cookies,剩余操作就不需要cookies了。
但是我使用cookies发现还是不能变成登陆状态,我也是很忧伤。但是你可以在模拟登陆后,然后取得cookies信息,用获得的cookies登陆,不过这就失去用cookie免登陆的价值了。


当我用jupyter notebook发现无法使用cookie让服务器认识我,当我用命令行时候,同样的代码反而没有问题,我无奈了。

上一篇:python 启动tomcat

下一篇:Django学习笔记

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...