python爬虫模拟扫码登录_Python爬虫基础-模拟登陆

2023-05-16

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

有些内容只有登陆才能进行爬取,如知乎,不登录的主页只能看到注册和登陆 ;

你想爬取自己的个人信息

有什么方法呢?

cookie

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

HTTP持久连接

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

实现方法!

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

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

d5c67999288f

获取cookies

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

带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让服务器认识我,当我用命令行时候,同样的代码反而没有问题,我无奈了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫模拟扫码登录_Python爬虫基础-模拟登陆 的相关文章

随机推荐