反爬虫-反反爬虫

一、常见的反爬虫手段

1、User_Agent 浏览器类型、版本信息等

2、Referer 表示我们从哪个连接跳转过来的

3、Cookis 登录信息


二、常用的反反爬虫手段

1、模拟用户浏览器的User_Agent

2、模拟用户登录

(1) requestes 的 post 请求

(2) WebDriver(Selenium ) 模拟浏览器行为

3、验证码


三、实例

1、模拟用户浏览器的User_Agent

(1)使用第三方库

#安装第三方库
pip install fake-useragent
from fake_useragent import UserAgent  

# 不进行ssl验证,否者会造成请求UserAgent失败

ua = UserAgent(verify_ssl=False)

# 模拟不同的浏览器
print(f'Chrome浏览器: {ua.chrome}')
# print(ua.safari)    #safari浏览器
# print(ua.ie)         #ie浏览器

# 随机返回头部信息,推荐使用
print(f'随机浏览器: {ua.random}')

(2)查看网页返回头中的User_Agent

当我们的爬虫无法获取到网页信息的时候,我们可以比对我们用浏览器访问时的头部信息,检查自己缺少了那些头部信息。


2、Referer

Referer 可以在Response headers找到,写到我们的请求头就可以了

对于简单的爬虫,在Request Headers 里面就能够找到很多用于爬虫的信息。


3、模拟用户登录

cookies 其实我们可以直接在Request Headers中获得,但是cookies有是有租期限制的,手动更改对于复杂的爬虫程序太过繁琐。cookis可以用来模拟用户登录,里面有用户的登录信息。

HTTP的GET和POST请求方法

1、GET 方法

import requests
r = requests.get('https://github.com')

#打印状态码
print(r.status_code)
#答应头部信息的内容类型
print(r.headers['content-type'])
# r.text
#返回字符编码
print(r.encoding)
# r.json()


2、 POST 方法

import requests
r = requests.post('http://httpbin.org/post', data = {'key':'value'})
r.json()

使用cookies模拟登录

1.找到登录请求发送到那个URL

在这里插入图片描述

2.定义post请求,参照Form Data的格式

在这里插入图片描述


request实现模拟登陆

import time
import requests
from fake_useragent import UserAgent
#
ua = UserAgent(verify_ssl=False)

headers = {
'User-Agent' : ua.random,
'Referer' : 'https://accounts.douban.com/passport/login_popup?login_source=anony'
}

#使得多个请求在一个Session会话中
s = requests.Session()
# 会话对象:在同一个 Session 实例发出的所有请求之间保持 cookie, 
# 期间使用 urllib3 的 connection pooling 功能。
# 向同一主机发送多个请求,底层的 TCP 连接将会被重用,从而带来显著的性能提升。

login_url = 'https://accounts.douban.com/j/mobile/login/basic'

form_data = {
'ck':'',
'name':'15055495@qq.com',
'password':'',
'remember':'false',
'ticket':''
}

# post数据前获取cookie
pre_login = 'https://accounts.douban.com/passport/login'

pre_resp = s.get(pre_login, headers=headers)

#携带这个cookies 进行登陆
response = s.post(login_url, data=form_data, headers=headers, cookies=s.cookies)


# 登陆后可以进行后续的请求
# url2 = 'https://accounts.douban.com/passport/setting'

#使用已经登陆的会话发起后续的请求
# response2 = s.get(url2,headers = headers)

#开启新的会话,但是携带了经过登录的会话的cookies
# response3 = newsession.get(url3, headers = headers, cookies = s.cookies)

#对返回信息进行保存
# with open('profile.html','w+') as f:
    # f.write(response2.text)

为什么要在post请求前进行一次请求,并在post请求时,携带cookies,因为如果不携带cookies未登录前的页面都有可能访问失败

有时候我们在输入完密码登录时,会有一个滑动验证码,这时候我们可以使用 WebDriver 来完成这个验证操作。

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值