Написание простого веб-скребка с использованием программирования Bash Перевод

German German 5 Сентября 2023 (ред)

В сфере парсинга веб-страниц 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/

2 Ответа

  1. Evg Evg 5 Сентября 2023

    Прикольный инструмент для простых случаев!

    Однако, в общем случае мы не сможем анализировать HTML с помощью регулярных выражений: https://stackoverflow.com/a/1732454 smile

    Парсинг HTML ужас

    P.S. Вообще парсинг html, это ужас… Например тут (получение поста по URL) пришлось отказаться от получения TITLE через регулярку, т.к. были сайты, на которых это не работало (арабские особенно). Вебмастера часто сами помещают туда черт знает что smile

    1. Visman Visman 5 Сентября 2023 (ред.)

      пришлось отказаться от получения TITLE через регулярку,

      Как тогда браузер понимает TITLE? Или речь не про html тег title?