Elixir爬虫 — crawlie简介

https://github.com/nietaki/crawlie

Crawlie 使用了 Elixir 的 GenStage 功能实现了并行爬虫。大部分工作通过 Crawlie.Stage.UrlManager 来完成。consume 用户提供的 url 列表,receive 接下来处理得到的 url,并保证每个 url 只被处理一次,保证 discovered urls 集合尽可能小,通过深度优先查找 url 树。

urls 通过 Crawlie.Stage.UrlManager 获取,GenStage Flow,然后使用 HTTPoison 并行获取 urls,并使用用户提供的回调函数处理响应。被发现的 urls 被发回 UrlManager。

下面是它的流程图

如果你对爬虫的统计数据感兴趣,可以查看Crawlie.crawl_and_track_stats/3
。它开启了一个Stats GenServer
在 Crawlie's supervision tree。收集爬虫过程的数据。

这个扩展通过如下方式使用:

Add crawlie to your list of dependencies in mix.exs:

def deps do
  [{:crawlie, "~> 0.6.0"}]
end

Ensure crawlie is started before your application:

def application do
  [applications: [:crawlie]]
end

看看示例

https://github.com/nietaki/crawlie_example

$ mix deps.get
$ mix crawlie.example
most popular words longer than 5 letters in the vicinity of ["https://en.wikipedia.org/wiki/Elixir_(programming_language)", "https://en.wikipedia.org/wiki/Mainframe_computer"]:
{word, count}
=============
{"system", 1973}
{"computer", 1618}
{"systems", 1257}
{"programming", 1165}
{"language", 1147}
{"software", 1052}
{"operating", 1022}
{"computers", 887}
{"languages", 873}
{"program", 825}
{"memory", 814}
{"number", 798}
{"called", 767}
{"between", 724}
{"company", 693}
{"support", 678}
{"different", 649}
{"including", 623}
{"however,", 620}
{"control", 590}

运行结果

源代码主要看这两个文件:
lib/mix/tasks/crawlie/example.ex and lib/crawlie_example/word_count_logic.ex.

https://github.com/nietaki/crawlie

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,757评论 2 45
  • 今夜如梦前 你在我睫毛上荡秋千 那笑声轻抚着我的指尖 雨落下来,打湿了我的记忆 漫漶了你的颜色 你在这迷蒙的山间隐...
    艾泽拉斯的霞光阅读 1,688评论 0 0
  • 我从小到现在,在语文课的分析文章方面都比较愚钝。因为我确实揣摩不出某些大家在做那篇文章时,某些标点符号,某些词语...
    灬荏苒灬阅读 3,613评论 1 0

友情链接更多精彩内容