目录
一、requests是什么?
requests是爬虫中一个基于网络请求的模块。
作用:模拟浏览器上网
二、使用步骤
1、环境安装
pip install requests
2、编码流程
1、
指定url2、发起请求
3、获取响应数据
4、持久化存储
3、模拟浏览器的侧重点
-
请求头模拟
- 静态请求参数
- User-Agent:请求载体的身份标识。
- Cookie:浏览器记录标识。
- Refere:防盗链。
- 其他参数。
-
请求参数模拟
- 静态请求参数
- 直接复制静态参数即可。
- 动态请求参数(重点)
- 如何确定数据是否是动态加载的?
- 使用抓包工具多次抓取该数据包,检测不同时刻抓取数据包中的请求参数是否有变动。
- 有哪些方式可以实现动态加载数据?
- 通过Ajax请求生成动态加载数据
- 这种方法在日常网站中应用时比较多的,极为常见。
- 通过JS生成动态加载的数据
- 这种方式少见一些,需要用到逆向工程解决。
- 通过Ajax请求生成动态加载数据
- 如何在浏览器中检测抓取的数据是否为动态加载?
- 在开发者工具中进行局部搜索,如果搜索不到则说明数据是动态加载的。
- 在数据包上按CTRL+F。
- 如何获取动态加载的数据?(重点)
- 在浏览器开发者工具中进行全局搜索。如果在进行全局搜索中,没有搜到想要的数据,则说明该组数据被加密了,此时就需要进行逆向操作。
- 点击浏览器开发者工具右上角的三个点,选择Search,进行全局搜索。
- 如何确定数据是否是动态加载的?
- 静态请求参数
三、两个请求
1、get请求
get请求的主要参数
url:发起请求的url
headers:请求头的伪装
params:请求参数
proxies:指定代理
使用requests发起get请求
通用模板
import requests
#指定url
url = "这里存放目标网站的网址"
#发起请求、获取响应
resp = requests.get(url)
持久化存储
with open("保存本地的地址",mode="模式",encoding="utf-8") as f:
f.write(resp.read().decode())
搜狗首页数据采集(示例):
import requests
#指定url
url = 'https://www.sogou.com/'
#发起请求
response = requests.get(url=url)
#获取响应数据/爬取到的数据
page_text = response.text
#持久化存储
with open('./sogou.html','w') as fp:
fp.write(page_text)
print('数据爬取存储成功!')
2、post请求
post请求的主要参数
url:发起请求的url
headers:请求头的伪装
data:请求参数
proxies:指定代理
json:如果抓包工具中的请求参数为字符串形式的键值对,则使用json参数
使用requests发起post请求
通用模板
import requests
#指定url
url = "这里存放目标网站的网址"
#发起请求、获取响应
resp = requests.post(url, headers=headers)
持久化存储
with open("保存本地的地址",mode="模式",encoding="utf-8") as f:
f.write(resp.read().decode())
百度翻译(示例):
import requests
url = "https://fanyi.baidu.com/sug"
data = {
"kw": input("请输入一个单词:")
}
resp = requests.post(url, data=data)
print(resp.text)
print(resp.json()['data'])
四、请求参数动态化和UA伪装
请求参数:
是客户端向服务端发起请求时携带的参数。
UA伪装:
目标网站是通过监测请求头中user-agent来判断请求是否由浏览器发起的。
而UA伪装就是伪装请求载体的身份标识,这种反爬机制是一种最常见也是最通用的,绝大多数网站都会携带该反爬机制。
网页采集器(输入你想要查询的名词,即可查询到相应的页面并且保存下来)
import requests
#请求参数动态化
keyword = input('请输入关键字:')
#稍后想要把该字典作为请求参数
pram = {
'query':keyword, #只存在一个键值对(存在一组请求参数)
}
#指定url
url = 'https://www.sogou.com/web'
#存放需要伪装的头信息
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
}
#通过headers参数进行了头信息的伪装
#params:get请求的参数
response = requests.get(url=url,params=pram,headers=headers)
#获取响应数据
page_text = response.text
#持久化存储
fileName = keyword + '.html'
with open(fileName,'w') as fp:
fp.write(page_text)
总结
本文主要讲述了requests模块的基本用法,动态参数的查找流程,初识了几个简单的反爬策略,请求参数动态化以及UA伪装等。
下期预告
爬虫基础--requests进阶
望各位学者朋友提出问题,帮助我及时改正,若有雷同之处,纯属巧合,联系我改之。