基础用法
基础调用
using Aneiang.Pa;
var result = await Pa.Source("WeiBo").GetAsync();
// result.Data 是 List<Dictionary<string, string>>
foreach (var item in result.Data)
{
Console.WriteLine(item["title"]);
if (item.ContainsKey("url"))
Console.WriteLine($" URL: {item["url"]}");
}
返回结构
GetAsync() 返回 ScrapeResult 对象:
| 属性 | 类型 | 说明 |
|---|---|---|
Data | List<Dictionary<string, string>> | 抓取到的数据列表 |
Source | string | 数据源名称 |
Elapsed | TimeSpan | 耗时 |
FromCache | bool | 是否命中缓存 |
Metadata | Dictionary<string, object> | 元数据 |
异步流式枚举
大数据量场景下,使用 StreamAsync() 逐条产出,内存友好:
await foreach (var item in Pa.Source("WeiBo").StreamAsync())
{
Console.WriteLine(item["title"]);
// 处理完一条再取下一条
}
单次选项覆盖
每次调用可以覆盖默认配置,不影响全局:
var fresh = await Pa.Source("WeiBo")
.NoCache() // 跳过缓存
.NoRetry() // 跳过重试
.WithTimeout(TimeSpan.FromSeconds(10)) // 自定义超时
.WithProxy("http://127.0.0.1:7890") // 临时代理
.WithHeader("X-Custom", "value") // 自定义 Header
.GetAsync();
可用选项方法
| 方法 | 说明 |
|---|---|
.NoCache() | 本次跳过缓存 |
.NoRetry() | 本次跳过重试 |
.WithTimeout(TimeSpan) | 自定义超时 |
.WithProxy(string) | 临时代理 |
.WithHeader(string, string) | 自定义请求头 |
.WithPaging(int, int) | 分页参数 |
列出所有数据源
foreach (var r in Pa.Sources())
Console.WriteLine($"[{r.Category}] {r.Name} {r.DisplayName}");
错误处理
try
{
var data = await Pa.Source("WeiBo").GetAsync();
}
catch (PaException ex)
{
Console.WriteLine($"抓取失败: {ex.Message}");
Console.WriteLine($"数据源: {ex.Source}");
}
免责声明
建议抓取间隔 ≥ 5 分钟,避免频繁抓取导致 IP 被封禁。
爬取的数据仅限用于个人学习、研究或公益目的。不得用于商业售卖、攻击他人或任何非法活动,否则需自行承担法律责任。