【发布时间】:2019-12-06 14:59:59
【问题描述】:
我有一个使用 Abot 抓取的域列表,目的是当它在其中一个站点上找到亚马逊链接时,它会退出,然后转到下一个站点。但我似乎看不到谁能退出页面抓取。例如
https://github.com/sjdirect/abot
static Main(string[] args)
{
var domains= new List<string> { "http://domain1", "http://domain2" };
foreach (string domain in domains)
{
var config = new CrawlConfiguration
{
MaxPagesToCrawl = 100,
MinCrawlDelayPerDomainMilliSeconds = 3000
};
var crawler = new PoliteWebCrawler(config);
crawler.PageCrawlCompleted += PageCrawlCompleted;
var uri = new Uri(domain);
var crawlResult = crawler.Crawl(uri);
}
}
private static void PageCrawlCompleted(object sender, PageCrawlCompletedArgs e)
{
var crawledPage = e.CrawledPage;
var crawlContext = e.CrawlContext;
var document = crawledPage.AngleSharpHtmlDocument;
var anchors = document.QuerySelectorAll("a").OfType<IHtmlAnchorElement>();
var hrefs = anchors.Select(x => x.Href).ToList();
var regEx= new Regex(@"https?:\/\/(www|smile)\.amazon(\.co\.uk|\.com).*");
var resultList = hrefs.Where(f => regEx.IsMatch(f)).ToList();
if (resultList.Any())
{
//NEED TO EXIT THE SITE CRAWL HERE
}
}
【问题讨论】:
-
问题 - 我认为 - 是您试图从 void 方法控制循环流。我不太确定这个库,但根据抓取结果来查找链接可能会更好。
-
是的,问题是这个库在那个事件处理程序中执行页面爬取,它只能返回 void。我想我会进入源代码,看看它在做什么,然后覆盖它或创建一个新方法。
标签: c# web-crawler abot