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

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


person Aillyn    schedule 18.09.2010    source источник


Ответы (7)


Вы можете использовать команду 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.

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

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

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

с завитком:

curl $url

с wget:

wget -O - $url

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

lynx -dump $url

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

Удачи :)

person julianvdb    schedule 18.09.2010
comment
Если бы я был вами, я бы дважды указал URL-адрес. - person Roadowl; 23.03.2021

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

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


Ресурсы:

person Colin Hebert    schedule 18.09.2010

Вы можете использовать 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.
person Giacomo    schedule 18.09.2010

Если у вас установлен 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>Example Web Page</TITLE>
</HEAD> 
<body>  
<p>You have reached this web page by typing &quot;example.com&quot;,
&quot;example.net&quot;,&quot;example.org&quot
  or &quot;example.edu&quot; into your web browser.</p>
<p>These domain names are reserved for use in documentation and are not available 
  for registration. See <a href="http://www.rfc-editor.org/rfc/rfc2606.txt">RFC 
  2606</a>, Section 3.</p>
</BODY>
</HTML>

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

person ephemient    schedule 18.09.2010

Ни curl, ни wget, ни ncat, ничего? Используйте 1_:

$ content=$(telnet localhost 80)
GET / HTTP/1.1
Host: localhost
Connection: close
 
Connection closed by foreign host.

$ echo $content
HTTP/1.1 200 OK Date: Mon, 22 Mar 2021 12:45:02 GMT Server:
Apache/2.4.46 (Fedora) OpenSSL/1.1.1j Last-Modified: Mon, 31 Dec 2018
15:56:45 GMT ETag: "a4-57e5375ad21bd" Accept-Ranges: bytes
Content-Length: 164 Connection: close Content-Type: text/html;
charset=UTF-8 Success! 192.168.1.1
person user15452187    schedule 22.03.2021

person    schedule
comment
@rjack: (Но статья, на которую вы ссылаетесь, действительно хорошо иллюстрирует синтаксис $(...) .) - person Jim Lewis; 18.09.2010