Простой скрипт парсинга email адресов с сайта

content_parsing

Недавно возникла необходимость собрать открытые email адреса с тематического ресурса, но не хватит никакого терпения делать это руками… Благо у человечества есть такие прекрасные консольные инструменты как wget, grep  и др., задача свелась к минимуму! Представляем Вам простейший bash скрипт для граббинга email адресов с нужного ресурса. На примере рассмотрим базу организаций querycom.ru

#!/bin/bash
# v.1
# Простой скрипт парсинга e-mail адресов с сервиса querycom
# с разбиением по категориям
# A. Yakovlev (https://boutnew.ru), 2016
#Путь к каталогу, в котором будут храниться адреса
PWD='.'
#Номера категорий берутся из
#соответствующих ссылок сервиса квериком
for SECTION in '150000' '160000' '170000' '180000' '190000' '200000' '210000' '220000' '230000' '240000' '250000' '260000' '270000' '280000' '290000' '300000' '310000' '320000' '330000' '340000' '350000' '360000' '100000' '110000' '120000' '130000' '140000' '500000' '510000' '520000' '600000' '610000' '620000' '630000' '370000' '400000' '410000' '900000' '010000' '020000' '050000'; do
#for SECTION in "$@"; do
if [ ! -d "$PWD/$SECTION" ]; then
mkdir "$PWD/$SECTION"
echo "Create directory: $PWD/$SECTION"
fi
echo "Parsing $SECTION"
#Сколько страниц в каждом разделе парсить (определяется автоматом)
PG_LIM=$(wget -q -O - "http://querycom.ru/companies/category/$SECTION" | grep -Po '(?<=\d">)\d*' | tail -1)
if [ -z "$PG_LIM" ]; then
PG_LIM=1
fi
echo "$PG_LIM pages in $SECTION category"
for ((PAGE=1; PAGE <= PG_LIM; PAGE++)); do
wget -q -O - "http://querycom.ru/companies/category/$SECTION/page/$PAGE" |
grep -Po '(?<=href=")/company[^"]*' | sed 's_.*_http://querycom.ru&_' >> "$PWD/$SECTION/links.txt";
echo -n '.'
done;
echo -e "\nAll Links in $SECTION category collected!"
echo -e "Start parsing emails in $SECTION category! Please wait..."
wget -q -O - -i $PWD/$SECTION/links.txt |
grep -Po '(?<=itemprop="email">)[^<]*' >> "$PWD/$SECTION/emails.txt";
sort -ui -o "$PWD/$SECTION/emails.txt" "$PWD/$SECTION/emails.txt"
cat "$PWD/$SECTION/emails.txt" >> "$PWD/summary_emails.txt"
echo -e "\n$SECTION ($PG_LIM pages): parsing done"
echo 'Unique e-mails: ' `/usr/bin/wc -l "$PWD/$SECTION/emails.txt"`
echo
done;
# Для повторных запусков (если не было вручную уничтожено созданное
#дерево каталогов с адресами) - сохранять только уникальные вновь добавленные адреса
sort -ui -o "$PWD/summary_emails.txt" "$PWD/summary_emails.txt"
echo 'Total unique e-mails: ' `/usr/bin/wc -l "$PWD/summary_emails.txt"`
exit 0;

На месте исполнения скрипт создает структуру папок по категориям, в них лежит список ссылок категории, а также собранные email адреса. Также все собранные адреса будут сохранятся в файл summary_emails.txt рядом со скриптом.
На данном сервисе нет никаких ограничений по количеству запросов к их серверу, поэтому никаких таймаутов не используется. Для сайтов, позволяющих делать только определенное количество запросов с одного ip адреса, необходимо использовать таймауты (sleep) или прокси. Если возникли проблемы с кодировкой при получении ответа от wget, то дополните скрипт следующей командой после wget.
iconv -f ISO-8859-1 -t UTF-8

Простой скрипт парсинга email адресов с сайта
Дата: 03/28/2016
Рейтинг: 5

Метки: , , , ,

Просмотров: 1 715

Добавить комментарий

Top