Подсчет и печать изображений с URL - PullRequest
0 голосов
/ 20 октября 2019

Это мой первый раз, когда я использую 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) Строка

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

res14: String = В * имеется 9 изображений1016 * site.

Итак, я предполагаю, что после распараллеливания списка мне нужно применить фильтр и создать список всех строк, содержащих «img src». Как мне создать такой список, а затемпечатать его построчно для отображения URL-адресов изображений?

1 Ответ

0 голосов
/ 21 октября 2019

Я не уверен, что это отличное решение для анализа HTML через Spark. Я думаю, что Spark создан для больших данных (пока это общего назначения). Я не нашел простого способа разбора HTML через Spark (но я легко нашел его для 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: я нашел 39 тегов изображения с атрибутом src на https://www.yahoo.com. Очень легко получить ошибку, если вы не используете хороший HTML-парсер. Другой способ: подготовьте свои данные и затем используйте Spark.

Извините за мой английский.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...