python爬虫基础(4)-- 验证码&代理&异步爬虫

四、验证码

4.1、简介

验证码是一种反爬机制。

识别验证码图片中的数据,用于模拟登陆操作。

4.2、识别方式

人工肉眼识别。(不推荐)

第三方自动识别(推荐)

4.3、第三方识别平台——超级鹰

4.3.1、使用教程

注册:普通和开发者用户

登录:

普通用户的登录:

​ 查询该用户是否还有剩余的题分

开发者用户的登录:

创建一个软件:

我的软件一》添加新软件-》录入软件名称-》提交((软件id 和秘钥)

下载示例代码:

开发文档一》常用开发语言示例下载(选择python)

4.4、模拟cookie

4.4.1、手动处理

通过抓包工具获取cookie值,将该值封装到headers中。(不建议)

4.4.2、自动处理

cookie值的来源:

模拟登录post请求后,由服务器端创建。

session会话对象:

作用:

1.可以进行请求的发送。

2.如果请求过程中产生了cookie,则该cookie会被自动存储/携带 在该session对象中。

使用步骤:

▶ 使用session对象进行模拟登录post请求的发送(cookie就会被存储在session中)

▶ session对象对个人主页对应的get请求进行发送(携带了cookie)

4.5、案例

模拟登陆

在这里插入图片描述

import requests
from lxml import etree
from requests import session
url = "https://so.gushiwen.cn/user/" \
      "login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
}

page_text = requests.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
code_img_url = "https://so.gushiwen.cn" + \
               tree.xpath("//img[@id='imgCode']/@src")[0]
code_img = requests.get(url=code_img_url, headers=headers).content

with open("yanzhengma.jpg", "wb") as fp:
    fp.write(code_img)
code = input("验证码")
data = {
    '__VIEWSTATE': "p/iyzbvKF80QivK5Al1qo5BeWQRLdqxT8tKtH2yVwZsN70le8af9GiEAdeo22f7RPIFTUD0hSC0rIArS8MD9sex8I5eqAUV0Bwzm9On6L/blvREPmp4BYPlX2e0=",
    '__VIEWSTATEGENERATOR': "C93BE1AE",
    'from': "http://so.gushiwen.cn/user/collect.aspx",
    'email': "1912383953@qq.com",
    'pwd': "LmJB5ivGBxqTwKf",
    'code': code,
    'denglu': "登录",
}
login_url = "https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx"
# 使用session进行post请求的发送
response = session.post(url=login_url, data=data, headers=headers)
print(response.status_code)
# 使用携带cookie的session进行get请求的发送

五、代理

5.1、代理简介

代理服务器

代理作用:

突破自身IP访问的限制。

隐藏自身真实IP

参考网站:快代理、西祠代理、www.goubanjia.com

代理ip的类型:

http:应用到http协议对应的url中

https:应用到https协议对应的url中

代理ip的匿名度:

透明:服务器知道该次请求使用了代理,也知道请求对应的真实ip。

匿名:知道使用了代理,不知道真实ip。

高匿:不知道使用了代理,更不知道真实的ip。

5.2、破解封ip的反爬机制

在这里插入图片描述

六、异步爬虫

6.1、目的

在爬虫中使用异步实现高性能的数据爬取操作。

6.2、异步爬虫方式

6.2.1、多线程,多进程(不建议):

好处:

可以为相关阻塞的操作单独开启线程或者进程,阻塞操作就可以异 步执行。

弊端:

无法无限制的开启多线程或者多进程。

6.2.2、线程池、进程池:

好处:

我们可以降低系统对进程或者线程创建和销毁的一个频率,从而很好的降低系统的开销。

弊端:

池中线程或进程的数量是有上限。

6.2.3、单线程+异步协程(推荐) :

event_loop:事件循环,相当于个无限循环,我们可以把一 些函数注册到这个事件循环上,当满足某些条件的时候,函数就会被循环执行。

**Coroutine:**协程对象,我们可以将协程对象注册到事件循环中,它会被事件循环调用。可以使用async 关键字来定义一个方法,这个方法在调用时不会立即被执行,而是返回一个协程对象。

**Task:**任务,它是对协程对象的进一步封装, 包含了任务的各个状态。

**Future:**代表将来执行或还没有执行的任务,实际上和task没有本质区别。

**Async:**定义一个协程。async修饰的函数。调用之后返回的一个协程对象。

**Await:**用来挂起阻塞方法的执行。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值