Python爬虫—request模块与验证码识别

相关文章链接: 

  ​​​​​​​​​​​​​​Python爬虫—爬虫基础简介

Python爬虫—数据解析及案例(4K图片爬取)

一、request模块

1.1、概念

        python中原生的一种基于网络请求的模块,功能非常强大,简单便捷,效率极高。

1.2、作用

        模拟浏览器发送请求

1.3、如何使用

request模块的编码流程 指定URL->发起请求->获取响应数据->持久化存储

1.4、UA

1、UA检测:门户网站的服务器会检测对应请求的载体身份标识

                       如果检测的请求的载体身份标识为一款浏览器,说明该请求是一个正常请求。

                        但如果检测到请求的载体身份不是基于某一款浏览器,这视该请求为不正常请求,                        那么服务器端很可能拒绝该次请求!

2、UA:User-Agent(请求载体的身份标识)

3、UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器

      UA伪装步骤:将对应的User-Agent封装到一个字典中

1.6、requests模块案例

案例1-简易网页采集器(爬取搜狗指定词条对应的搜索结果页面)

        -输入想要搜索的词条

import requests  # 导包

# UA检测:门户网站的服务器会检测对应请求的载体身份标识,
#        如果检测的请求的载体身份标识为某一款浏览器,说明该请求是一个正常请求。
#        但如果检测到请求的载体身份不是基于某一款浏览器,这视该请求为不正常请求,那么服务器端很可能拒绝该次请求!
# UA: User-Agent(请求载体的身份标识)

# UA伪装(UA检测对应的反反爬策略):让爬虫对应的请求载体身份标识伪装成某一款浏览器
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'} # UA伪装步骤:将对应的User-Agent封装到一个字典中
url = 'https://www.sogou.com/web'  # 步骤1:指定url,搜索栏上的网址
kw = input('enter a word:')  # 设置动态搜索词条
param = {'query': kw}  # 处理url携带的参数:封装到字典中
response = requests.get(url=url, params=param, headers=headers)  # 步骤2:发起请求   对指定的url发起请求对应的是携带参数的,并且请求过程中已经处理了参数。
page_text = response.text # 步骤3:响应数据
filename = kw + '.html'  # 命名文件名,以html形式呈现
with open(filename, 'w', encoding='utf-8') as fp: # 步骤4:对响应数据持续化呈现
    fp.write(page_text)
print("保存成功")

补充知识:ajax

        ajax全名async javascript and XML(异步JavaScript和XML)是前后台交互的能力也就是客户端给服务端发送消息的工具以及接受响应的工具。AJAX不是新的编程语言,而是一种使用现有标准的新方法。AJAX在不重新加载整个页面的情况下与服务器交换数据并更新部分网页,是一个默认异步执行机制的功能,AJAX分为同步(async = false)和(async = true)

        同步请求:是指当前发出请求后浏览器什么都不能做必须得等到请求完成返回数据之后才会执行后续的代码相当于生活中的排队,必须等待前一个人完成自己的事情,后一个人才能接着办。

        异步请求:就是当发出请求的同时浏览器可以继续做任何事Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。

案例2-豆瓣电影排行榜

import requests
import json

# 步骤1:指定URL
url = 'https://movie.douban.com/j/chart/top_list'

# 步骤2:UA伪装
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'}  # UA伪装步骤:将对应的User-Agent封装到一个字典中

# 步骤3;动态参数设置
param = {'type': '24',
         'interval_id': '100:90',
         'action':'',
         'start':'0', # 表示从库中的第几部电影去取
         'limit': '20'} # 表示一次取出的个数

# 步骤4:发起请求
response = requests.get(url=url,params=param,headers=headers)

# 步骤5:获取响应数据
list_data = response.json()

# 步骤6:持久化存储
fp = open('./douban.json', 'w', encoding='utf-8')
json.dump(list_data, fp=fp, ensure_ascii=False)

print('over!!!!')

将生成的douban.json文件内json格式码导入在线JSON格式化工具即可查看豆瓣电影排行榜情况

二、验证码

2.1、验证码和爬虫之间的关系

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

识别验证码操作:

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

—第三方自动识别(推荐)

-超级鹰使用流程(http://www.chaojiying.com)

注册用户->登陆->提分->创建一个软件(id)->开发文档,识别语言

5.2、使用打码平台识别验证码的编码流程

将验证码图片进行本地下载

调用平台提供的示例代码进行图片数据识别

5.3、模拟登陆流程梳理

—爬取基于某些用户的用户信息。

步骤1:验证码识别,获取验证码图片的文字数据

步骤2:对post请求进行发送(处理请求参数)

步骤3:对响应数据进行持久化存储

5.4、cookie

cookie用来让服务器端记录客户端的相关状态

处理方式:

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

自动处理session会话对象

cookie值的来源是哪里?——模拟登陆post请求后,由服务器端创建

session会话对象:

作用:

-1、可以进行请求的发送

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

自动处理步骤

—步骤1:创建一个session对象session = requests.Session()

—步骤2:使用session对象进行模拟登陆post请求的发送cookie就会被存储在session中

—步骤3:session对象对个人主页对应的get请求进行发送携带了cookie

​​​​​​​5.5、代理

破解封IP这种反爬机制

什么是代理?—代理服务器。

代理的作用:—突破自身IP访问的限制。

                       —可以隐藏自身IP,免受攻击,防止被锁。

代理相关的网站:快代理;西祠代理;www.goubanjia.com

代理ip的类型:http:应用到http协议对应的url中

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

代理ip的匿名度:

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

—匿名:知道使用了代理,但是不知道真实的ip

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

反爬机制:封ip    对应的反反爬策略:使用代理进行发送请求。

猜你喜欢

转载自blog.csdn.net/beiye_/article/details/126451359
今日推荐