StormCrawler原型拓扑无法抓取外链及仅抓取少量页面问题咨询
解决StormCrawler仅抓取首页的问题
嘿,我之前也碰到过一模一样的情况!StormCrawler的默认配置有时候会悄悄限制爬取行为,导致明明解析出了链接却不继续抓取。结合你说的日志信息,咱们从这几个方向排查:
1. 检查URL过滤规则
默认的URL过滤器可能误把站内链接当成外部链接拦截掉了。你需要修改urlfilter.json配置文件,确保允许books.toscrape.com的所有子路径:
{ "class": "com.digitalpebble.stormcrawler.filtering.basic.BasicURLFilter", "params": { "allow": [ "^http(s)?://books\\.toscrape\\.com(/.*)?$" ], "deny": [ "\\.(png|gif|jpg|jpeg|ico|pdf)$" ] } }
这个规则会允许目标站点的所有HTTP/HTTPS链接,同时过滤掉图片、PDF这类非页面资源。
2. 调整爬取深度限制
StormCrawler默认的depth.max参数可能设为0或者1,导致只抓取种子页面(首页)就停止。打开你的conf.yaml,把这个值调高:
depth.max: 10
这样爬虫就能抓取首页之后的多层链接了。
3. 优化并发与队列配置
默认的并发线程数和队列容量太低,也可能导致链接无法被及时调度抓取。在conf.yaml里添加这两个配置:
fetcher.threads.number: 10 spout.max.pending: 1000
前者增加抓取线程数,后者提升待处理队列的容量,让爬虫能同时处理更多请求。
4. 验证种子文件配置
确认你的种子文件里只包含http://books.toscrape.com/,并且StormCrawler能正确读取到它。有时候种子路径配置错误,会导致爬虫只处理一次种子就结束。
最后,你可以通过日志进一步定位问题:如果看到Filtered out URL的日志,说明链接被过滤器拦截了;如果队列相关日志显示待抓取数一直为0,那可能是深度或并发的问题。调整完配置后重新提交拓扑,应该就能正常抓取更多页面啦!
内容的提问来源于stack exchange,提问作者Jonas Pohlmann
相关产品推荐
相关产品推荐

