首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Windows Azure创建Web爬虫程序

使用Windows Azure创建Web爬虫程序
EN

Stack Overflow用户
提问于 2012-06-01 03:46:30
回答 3查看 4.9K关注 0票数 1

我想创建一个网络爬虫,它将一些网站的内容保存在blob存储中。在Azure上做这件事的正确方法是什么?我是否应该启动一个工作者角色,并使用Thread.Sleep方法使其每天运行一次?

我还想知道,如果我使用这个Worker角色,如果我创建它的两个实例,它将如何工作?我注意到在使用"Compute Emulator UI“时,命令"Trace.WriteLine”同时在两个实例上工作,有人能澄清这一点吗?

我使用php创建了相同的爬虫,并将cron作业设置为每天启动脚本一次,但它花了6个小时才抓取全部内容,这就是为什么我想使用Azure。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-02 13:37:42

这是正确的方法,从2014年1月起,微软引入了Azure WebJobs,在那里你可以创建一个项目(例如控制台),并将其作为计划任务运行(发生一次,循环)

https://azure.microsoft.com/en-us/documentation/articles/web-sites-create-web-jobs/ http://www.hanselman.com/blog/IntroducingWindowsAzureWebJobs.aspx

票数 4
EN

Stack Overflow用户

发布于 2012-06-01 03:55:38

考虑到工作者角色基本上是Windows2008Server,您可以运行与本地运行相同的代码。

但是,考虑到角色实例可能重新启动的原因有几个:操作系统更新、崩溃等。在这些情况下,您可能会丢失正在完成的工作。所以..。您可以通过以下几种方式处理此问题:

  • 队列。将消息放在命令队列中。如果是一天一次的任务,您可以在处理完前一条消息后将消息推送到队列中。请注意,您可以在消息上设置不可见超时,这样它就不会在一天内出现。如果在处理过程中出现故障,消息将重新出现在队列中,并由不同的实例来处理它。您还可以边走边修改消息,以跟踪您的status.
  • Scheduler.只需确保只有一个实例在运行(通过互斥)。要做到这一点,一种简单的方法是尝试在blob上获取写锁(只能有一个)。

有一件事需要考虑,那就是把你的网络爬行分解成不同的任务(url?)并将它们单独放在队列中?这样,您就可以进行扩展,在同一实例中运行多个实例,或者可能运行多个线程(因为web爬行很可能是阻塞操作,而不是cpu和带宽密集型操作)。

票数 1
EN

Stack Overflow用户

发布于 2012-06-01 03:55:12

每天运行一次的单个工作角色可能是最好的方法。不过,我不会使用线程睡眠,因为您可能想要重新启动实例,然后它可能会在一天前或一天后启动,具体取决于您的编程。如何将任务命令作为消息放在Azure队列中,并在它被工作者角色拾取后将其出队,然后在Azure队列中添加一次新的任务命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10840267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档