Паук URL веб-сайта и возврата только

Я ищу путь к псевдопауку веб-сайт. Ключ - то, что я на самом деле не хочу содержание, а скорее простой список URIs. Я могу добраться обоснованно близко к этой идее с Wget с помощью --spider опция, но при передаче по каналу того вывода через a grep, Я, может казаться, не нахожу правильное волшебство заставить его работать:

wget --spider --force-html -r -l1 http://somesite.com | grep 'Saving to:'

grep фильтр, кажется, не имеет абсолютно никакого влияния на wget вывод. Я получил что-то не так или есть ли другой инструмент, который я должен попробовать, это более приспособлено к обеспечению этого вида ограниченного набора результатов?

ОБНОВЛЕНИЕ

Таким образом, я просто узнал офлайн это, по умолчанию, wget записи к stderr. Я пропустил это в страницах справочника (на самом деле, я все еще не нашел его, если это там). После того как я передал возврат по каналу к stdout, я стал ближе к тому, в чем я нуждаюсь:

wget --spider --force-html -r -l1 http://somesite.com 2>&1 | grep 'Saving to:'

Я все еще интересовался бы другими/лучше средствами для того, чтобы сделать такого рода вещь, если кто-либо существует.

58
задан Ciro Santilli 新疆改造中心法轮功六四事件 10 April 2016 в 02:06
поделиться

2 ответа

Абсолютное последнее , что я хочу сделать, это загрузить и проанализировать весь контент сам (т.е. создать своего собственного паука). Как только я узнал, что Wget по умолчанию пишет в stderr, я смог перенаправить его на stdout и соответствующим образом отфильтровать вывод.

wget --spider --force-html -r -l2 $url 2>&1 \
  | grep '^--' | awk '{ print $3 }' \
  | grep -v '\.\(css\|js\|png\|gif\|jpg\)$' \
  > urls.m3u

Это дает мне список ресурсов контента (ресурсы, не являющиеся изображениями, исходными файлами CSS или JS), которые передаются через паук. Оттуда я могу отправить URI стороннему инструменту для обработки в соответствии с моими потребностями.

Вывод по-прежнему необходимо немного оптимизировать (он производит дубликаты, как показано выше), но он почти готов, и мне не пришлось выполнять синтаксический анализ самостоятельно.

48
ответ дан 7 November 2019 в 05:34
поделиться

Создайте несколько регулярных выражений для извлечения адресов из всех

<a href="(ADDRESS_IS_HERE)">.

Вот решение, которое я бы использовал:

wget -q http://example.com -O - | \
    tr "\t\r\n'" '   "' | \
    grep -i -o '<a[^>]\+href[ ]*=[ \t]*"\(ht\|f\)tps\?:[^"]\+"' | \
    sed -e 's/^.*"\([^"]\+\)".*$/\1/g'

Это выведет все http, https , ftp и ftps ссылки с веб-страницы. Он не даст вам относительных URL-адресов, только полные URL-адреса.

Объяснение опций, используемых в серии передаваемых команд:

wget -q исключает избыточный вывод (тихий режим). wget -O - заставляет отображать загруженный файл в стандартный вывод, а не на диск.

tr - это переводчик символов unix, используемый в этом примере для перевода новой строки и табуляции в пробелы, а также для преобразования одинарных кавычек в двойные кавычки, чтобы мы могли упростить наши регулярные выражения.

grep -i делает поиск нечувствительным к регистру grep -o заставляет выводить только совпадающие части.

sed - это unix-утилита Stream EDitor, которая позволяет выполнять операции фильтрации и преобразования.

sed -e просто позволяет вам скармливать ему выражение.

Запуск этого небольшого скрипта на сайте " http://craigslist.org " дал довольно длинный список ссылок:

http://blog.craigslist.org/
http://24hoursoncraigslist.com/subs/nowplaying.html
http://craigslistfoundation.org/
http://atlanta.craigslist.org/
http://austin.craigslist.org/
http://boston.craigslist.org/
http://chicago.craigslist.org/
http://cleveland.craigslist.org/
...
21
ответ дан 7 November 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: