相关文章链接:
Python爬虫—爬虫基础简介
一、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 对应的反反爬策略:使用代理进行发送请求。