当前位置:   article > 正文

反爬虫-反反爬虫

反反爬虫

一、常见的反爬虫手段

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
  • 1
  • 2
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}')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2、 POST 方法

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

使用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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

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

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

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/226423
推荐阅读
相关标签
  

闽ICP备14008679号