Как получить содержимое веб-страницы в переменной оболочки?

115

Как в Linux получить URL-адрес и получить его содержимое в переменной в сценарии оболочки?

Aillyn
источник

Ответы:

189

Вы можете использовать wgetкоманду, чтобы загрузить страницу и прочитать ее в переменной как:

content=$(wget google.com -q -O -)
echo $content

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

Для этого можно использовать команду curl, а также:

content=$(curl -L google.com)
echo $content

Нам нужно использовать эту -Lопцию, поскольку запрашиваемая страница могла быть перемещена. В этом случае нам нужно получить страницу из нового места. Опция -Lили --locationпомогает нам в этом.

codaddict
источник
Это действительно изящный трюк. Я вызываю сценарий оболочки через сценарий php на прокси-сервере. При запросе прокси-сервер включает дорогие серверы, которые отключаются через 2 часа. Мне нужен вывод wget для стандартного вывода, чтобы передать его в запись консоли Jenkins.
Деннис
Я еще не понял этого ... может ли кто-нибудь продемонстрировать, как, например. получить тег img в переменной для этой ссылки www2.watchop.io/manga2/read/one-piece/1/4 ??
juggernauthk108
@ juggernaut1996: это должен быть отдельный вопрос. Вкратце, вы должны загрузить страницу, извлечь srcатрибут правильного элемента, а затем загрузить эту страницу. Если вы устанавливаете tq , эта команда должна это сделать:curl -s http://ww1.watchop.io/manga2/read/one-piece/1/4 | tq -j -a src "#imgholder a img" | xargs wget
pyrocrasty
Версия Wget 1.14 не принимается convert_links = onс -O-опцией. Выдает ошибку -k can be used together with -O only if outputting to a regular file.. Ожидается?
Prasad Bonthu
28

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

Если вам нужен исходный код:

с завитком:

curl $url

с wget:

wget -O - $url

но если вы хотите получить то, что видите в браузере, вам может пригодиться lynx:

lynx -dump $url

Я думаю, вы можете найти так много решений этой маленькой проблемы, возможно, вам стоит прочитать все страницы руководства по этим командам. И не забудьте заменить $urlна свой URL :)

Удачи :)

julianvdb
источник
9

Есть wgetкоманда или curl.

Теперь вы можете использовать файл, который вы загрузили с помощью wget. Или вы можете обработать поток с помощью curl.


Ресурсы :

Колин Хеберт
источник
3
content=`wget -O - $url`
Джим Льюис
источник
@rjack: (Но статья, на которую вы ссылаетесь, действительно представляет собой довольно хороший аргумент в пользу синтаксиса $ (...).)
Джим Льюис,
3

Если у вас установлен LWP , он предоставляет двоичный файл с именем « GET ».

$ GET http://example.com
<! DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN">
<HTML>
<HEAD>
  <META http-Equiv = "Content-Type" content = "text / html; charset = utf-8">
  <TITLE> Пример веб-страницы </TITLE>
</ HEAD> 
<Тело>  
<p> Вы попали на эту веб-страницу, набрав & quot; example.com & quot ;,
& Quot; example.net & Quot;, & Quot; example.org & Quot
  или "example.edu" в ваш веб-браузер. </p>
<p> Эти доменные имена зарезервированы для использования в документации и недоступны 
  для регистрации. См. <a href="http://www.rfc-editor.org/rfc/rfc2606.txt"> RFC
  2606 </a>, раздел 3. </p>
</ BODY>
</ HTML>

wget -O-, curlИ lynx -sourceведут себя аналогичным образом .

ephemient
источник
2

Вы можете использовать curlили wgetдля получения необработанных данных, или вы можете использовать, w3m -dumpчтобы иметь красивое текстовое представление веб-страницы.

$ foo=$(w3m -dump http://www.example.com/); echo $foo
You have reached this web page by typing "example.com", "example.net","example.org" or "example.edu" into your web browser. These domain names are reserved for use in documentation and are not available for registration. See RFC 2606, Section 3.
Giacomo
источник