首页 / 文档 / 基础用法

基础用法

基础调用

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 对象:

属性类型说明
DataList<Dictionary<string, string>>抓取到的数据列表
Sourcestring数据源名称
ElapsedTimeSpan耗时
FromCachebool是否命中缓存
MetadataDictionary<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 被封禁。

爬取的数据仅限用于个人学习、研究或公益目的。不得用于商业售卖、攻击他人或任何非法活动,否则需自行承担法律责任。