【问题标题】:Count and print images from URL从 URL 计算和打印图像
【发布时间】:2020-02-16 22:47:53
【问题描述】:

这是我第一次使用 Spark/Scala,我迷路了。

我想写一个程序,接收一个 URL 并输出图像的数量和图像文件的名称。

所以我能够获得图像计数。我在命令提示符下完成了这一切,这使得在不重新输入整个内容的情况下返回并编辑我的 def 变得非常困难。有没有更好的选择。我花了很长时间才让 Spark/Scala 正常工作(我想使用 PySpark 但无法让它们进行通信)

scala> def URLcount(url : String) : String = {

 | var html = scala.io.Source.fromURL(url).mkString

 | var list = html.split("\n").filter(_ != "")

 | val rdds = sc.parallelize(list)

 | val count = rdds.filter(_.contains("img")).count()

 | return("There are " + count + " images at the " + url + " site.")

 | }

URLcount: (url: String)String

scala> URLcount("https://www.yahoo.com/")

res14: String = https://www.yahoo.com/ 网站上有 9 张图片。

所以我假设在我并行化列表之后我应该应用过滤器并创建包含“img src”的所有字符串的列表 如何创建这样的列表,然后逐行打印以显示图像 url?

【问题讨论】:

  • “有没有更好的选择” - 您可以在任何 IDE、Jupyter 或 Zeppelin 中编写 Spark 程序

标签: image scala apache-spark url


【解决方案1】:

我不确定它是否是通过 Spark 解析 HTML 的绝佳解决方案。我认为 Spark 是为大数据创建的(虽然它是通用的)。我没有找到任何通过 Spark 解析 HTML 的简单方法(但我很容易找到 XML 和 JSON 的方法)。这意味着在这种情况下您将打印一个很长的字符串,因为 HTML 页面经常被压缩。无论如何,对于这个页面,您的程序将打印如下行:

<p>So I'm assuming after I parallelize the list I should be about to apply a filter and create a list of all the strings that contain "img src"

我可以建议你使用 Jsoup:

  val yahoo = Jsoup.connect("https://www.yahoo.com").get
  val images = yahoo.select("img[src]")
  images.forEach(println)

您可以将 Spark 用于其他目的。

PS:我在https://www.yahoo.com 上找到了 39 个带有 src 属性的图像标签。如果不使用好的 HTML 解析器,很容易出错。 另一种方法:准备数据而不是使用 Spark。

对不起我的英语。

【讨论】:

  • Jsoup 可以插入到 Spark 中,但只有在你有大量要解析的 url 列表时才有意义,所有类似
猜你喜欢
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多