Написание простого веб-скребка с использованием программирования Bash Перевод
В сфере парсинга веб-страниц Python часто оказывается в центре внимания благодаря надежным библиотекам, таким как BeautifulSoup и Scrapy. Но знаете ли вы, что парсинг веб-страниц также можно выполнить с помощью сценариев Bash?
В этом сообщении блога мы углубимся в сценарий Bash
, который извлекает ссылки и заголовки с веб-страницы и сохраняет их в файле CSV.
Проведя большую часть рабочего дня за терминалом, я хорошо познакомился с написанием сценариев автоматизации Bash. Однако, чтобы добавить творческий подход, я рискнул окунуться в мир парсинга веб-страниц с помощью Bash. Хотя Bash преуспевает в написании сценариев, я обнаружил его скрытые таланты в парсинге веб-страниц, которыми я рад поделиться в этом сообщении в блоге.
#!/bin/bash
# Define the URL to scrape
base_url="https://lite.cnn.com"
url="https://lite.cnn.com/"
# Create a CSV file and add a header
echo "Link,Title" > cnn_links.csv
# Extract links and titles and save them to the CSV file
link_array=($(curl -s "$url" | awk -F 'href="' '/<a/{gsub(/".*/, "", $2); print $2}'))
for link in "${link_array[@]}"; do full_link="${base_url}${link}"
title=$(curl -s "$full_link" | grep -o '<title[^>]*>[^<]*</title>' | sed -e 's/<title>//g' -e 's/<\/title>//g')
echo "\"$full_link\",\"$title\"" >> cnn_links.csv
done echo "Scraping and CSV creation complete. Links and titles saved to 'cnn_links.csv'."
Как это работает?
Этот сценарий Bash выполняет следующее:
-
Он определяет базовый URL-адрес и URL-адрес веб-страницы, которую вы хотите парсить.
-
Он создает файл CSV
cnn_links.csv
с именем и строкой заголовка, содержащей столбцы «Ссылка» и «Название». -
Используя
curl
, он извлекает HTML-содержимое указанной веб-страницы и извлекает все ссылки, найденные в тегах привязки,(<a>)
используяawk
. -
Затем он перебирает массив ссылок и извлекает заголовки страниц, выполняя дополнительные
curl
запросы к каждой ссылке. -
Наконец, он добавляет извлеченные ссылки и заголовки в файл CSV в нужном формате.
…
Итак, вот простой веб-скребок, написанный на bash
и использующий такие инструменты командной строки awk
, как sed
, grep
и curl
. Поскольку bash
доступен в большинстве систем Linux, он может быть полезен для получение данных с веб-страниц без необходимости установки какого-либо дополнительного программного обеспечения.
Читать полностью: https://muhammadraza.me/2023/webscraping-in-bash/
Прикольный инструмент для простых случаев!
Однако, в общем случае мы не сможем анализировать HTML с помощью регулярных выражений: https://stackoverflow.com/a/1732454 :)
P.S. Вообще парсинг html, это ужас… Например тут (получение поста по URL) пришлось отказаться от получения TITLE через регулярку, т.к. были сайты, на которых это не работало (арабские особенно). Вебмастера часто сами помещают туда черт знает что :)
Как тогда браузер понимает TITLE? Или речь не про html тег title?