Як отримати текст сторінки за допомогою wget без html?


17

Якщо я спробую wget на веб-сторінці, я отримую сторінку як HTML. Чи можливо отримати лише текст файлу без пов'язаного html? (Це потрібно для мене, оскільки частина сторінок HTML містить c програму завантажується з HTML-тегами. Мені потрібно відкрити її в браузері та вручну скопіювати текст, щоб створити .c файл.)


1
Насправді це можливо, але вам потрібно написати якусь функцію, яка буде розбирати код зі сторінки та зберігати її як .c. Це не важко, але це залежить від структури сторінки. Якщо ви надасте посилання, можливо, хтось допоможе вам з точним кодом. Інакше sedчи perlваші друзі.
пік

Відповіді:


26

wgetбуде лише отримати документ. Якщо документ знаходиться в HTML, те, що ви хочете, є результатом розбору документа.

Ви можете, наприклад, користуватися lynx -dump -nolist, якщо навколо вас є рись.

lynxце легкий, простий веб-браузер, який має цю -dumpфункцію, яка використовується для виведення результату процесу розбору. -nolistуникає списку посилань у кінці, який з’явиться, якщо на сторінці є якісь гіперпосилання.

Як згадував @Thor, elinksдля цього також можна використовувати, оскільки він також має -dumpможливість (і -no-referencesсписок просих посилань повинен опустити). Це може бути особливо корисно, якщо ви переходите через якийсь сайт, використовуючи -sigh- frame (MTFBWY).

Крім того, майте на увазі, що, якщо сторінка справді не є лише кодом С з HTML-тегами, вам потрібно буде перевірити результат, щоб переконатися, що там нічого більше, ніж код C.


6

Якщо у вас не встановлені ці інші інструменти, а лише wget, а на сторінці немає форматування просто звичайного тексту та посилань, наприклад, вихідний код або список файлів, ви можете зняти HTML за допомогою sed так:

wget -qO- http://address/of/page/you/want/to/view/ | sed -e 's/<[^>]*>//g'

Для цього використовується wget, щоб скинути джерело сторінки в STDOUT і sed, щоб зняти будь-які <> пари і що-небудь між ними.

Потім можна перенаправити вихід команди sed на файл, який ви бажаєте створити, використовуючи>:

wget -qO- http://.../ | sed -e 's/<[^>]*>//g' > downloaded_file.txt

Примітка. Ви можете виявити, що у файлі, який ви не хочете, є додаткове пробіл (наприклад, рядки з відступом в декількох стовпцях)

Можливо, найпростіше скористатися текстовим редактором, щоб виправити файл (або формат джерела під час завантаження вихідного коду C).

Якщо вам потрібно зробити те ж саме, що потрібно у кожному рядку файлу, ви можете включити команду, щоб зробити це в команді sed (тут знімаючи один провідний пробіл):

wget -qO- http://.../ | sed -e 's/<[^>]*>//g;s/^ //g' > downloaded_stripped_file.txt

3

просто додати ще один інструмент. Я вважаю за краще w3m, що це lynxяк консольний браузер. Ви можете перевірити, що вже є у вашій системі.

w3m -dump website.html
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.