请求功能
约 1185 字大约 4 分钟
2025-01-14
框架内的请求功能同样也具有丰富的功能,这里你会看到更多的使用技巧
简介
该模块封装了网络请求功能,支持HTTP/HTTPS请求,适用于数据抓取、接口请求等场景。模块支持多种请求方式,并提供了超时重试、请求头自定义、代理设置等功能。
功能特点
多种请求方式
:支持 GET、POST、Patch 等常用请求方法。请求重试机制
:支持失败重试,避免临时性网络问题导致任务中断。自定义请求头
:可灵活设置请求头(Headers),支持模拟浏览器请求。超时与延迟控制
:支持请求超时设置,防止请求长时间阻塞。代理支持
:支持 HTTP/HTTPS 代理,突破 IP 限制。方法回调
:通过设置回调函数,响应回调功能用于在请求完成后自动处理响应数据链路传参
:可以在请求发送时携带自定义数据,并在响应回调函数中访问这些数据代理忽略
:针对某些特定场景下不需要ip代理时,通过配置该参数来进行控制请求模块切换
:通过参数设置可以切换请求库,避免单一请求库无法满足需求TLS指纹绕过
:可以有效模拟浏览器的安全请求,绕过反爬机制,提升数据抓取的安全性和稳定性。
参数说明
Requests方法
参数名 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
url | str | ✅ | 目标url | |
headers | dict | ❌ | None | 请求时使用的header值 |
params | dict | ❌ | None | 请求用到的额外参数 |
cookies | dict | ❌ | None | 请求所使用的cookies值 |
timeout | int | ❌ | None | 最大超时时间 |
callback | Callable | ✅ | 响应回调函数 | |
meta | dict | ❌ | None | 请求链路传参,常用于多层页面数据获取、任务追踪、状态传递等场景 |
proxy | str | ❌ | None | 请求使用的ip代理,格式:'http://xxx.xxx.xxx' |
level | int | ❌ | 0 | 请求优先级,数字越大优先级越高,不设置时会根据回调函数自动生成 |
verify_ssl | bool | ❌ | None | 是否禁用ssl验证 |
allow_redirects | bool | ❌ | True | 是否允许请求跳转 |
is_file | bool | ❌ | False | 请求是否是用于文件下载 |
retry_count | int | ❌ | 0 | 最大失败重试次数 |
is_encode | bool | ❌ | None | 是否编码url |
ignore_ip | bool | ❌ | False | 请求是否忽略ip代理 |
is_httpx | bool | ❌ | False | 是否使用httpx库进行请求 |
is_TLS | bool | ❌ | False | 是否使用TLS请求 |
dont_filter | bool | ❌ | False | 请求是否进行去重 |
encoding | str | ❌ | 响应编码格式,不设置时,框架内部会自动解析 |
- 示例代码
# -*- coding: utf-8 -*-
import hunterx
from hunterx.spiders import MemorySpider
class FirstSpiderSpider(MemorySpider):
name = 'first_spider'
def __init__(self):
self.header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
def start_requests(self):
url = 'https://www.example.com/'
yield hunterx.Requests(url=url, headers=self.header, callback=self.parse, level=1)
async def parse(self, response):
print(response.status_code)
if __name__ == '__main__':
start_run = FirstSpiderSpider()
start_run.run()
FormRequests方法
参数名 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
url | str | ✅ | 目标url | |
headers | dict | ❌ | None | 请求时使用的header值 |
data | dict | ❌ | None | 请求时所用到的form表单参数 |
json_params | dict | ❌ | None | 请求时所用到的json参数 |
cookies | dict | ❌ | None | 请求所使用的cookies值 |
timeout | int | ❌ | None | 最大超时时间 |
callback | Callable | ✅ | 响应回调函数 | |
meta | dict | ❌ | None | 请求链路传参,常用于多层页面数据获取、任务追踪、状态传递等场景 |
proxy | str | ❌ | None | 请求使用的ip代理,格式:'http://xxx.xxx.xxx' |
level | int | ❌ | 0 | 请求优先级,数字越大优先级越高,不设置时会根据回调函数自动生成 |
verify_ssl | bool | ❌ | None | 是否禁用ssl验证 |
allow_redirects | bool | ❌ | True | 是否允许请求跳转 |
is_file | bool | ❌ | False | 请求是否是用于文件下载 |
retry_count | int | ❌ | 0 | 最大失败重试次数 |
is_encode | bool | ❌ | None | 是否编码url |
ignore_ip | bool | ❌ | False | 请求是否忽略ip代理 |
is_httpx | bool | ❌ | False | 是否使用httpx库进行请求 |
is_TLS | bool | ❌ | False | 是否使用TLS请求 |
dont_filter | bool | ❌ | False | 请求是否进行去重 |
encoding | str | ❌ | 响应编码格式,不设置时,框架内部会自动解析 |
- 示例代码
# -*- coding: utf-8 -*-
import hunterx
from hunterx.spiders import MemorySpider
class FirstSpiderSpider(MemorySpider):
name = 'first_spider'
def __init__(self):
self.header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
def start_requests(self):
url = 'https://www.example.com/'
data = {
'page': 1,
'size': 10
}
yield hunterx.FormRequests(url=url, data=data, headers=self.header, callback=self.parse, level=1)
async def parse(self, response):
print(response.status_code)
if __name__ == '__main__':
start_run = FirstSpiderSpider()
start_run.run()
总结
该请求功能模块具备灵活性和高扩展性,支持多种请求方式与配置,能够满足大多数爬虫和数据请求场景的需求