Mali poduzetnici do novih potencijalnih klijenta dolaze na četiri glavna načina: poštom, e-mailom, hladnim pozivom ili preporukom. Iako postoji cijela teorija marketinga o tome kako doći do novih klijenata, prvi kontakt se u većini slučajeva temelji na ove 4 jednostavne tehnike (barem kada je riječ o B2B prodaji). U ovom postu ću pokazati kako se pomoću programskog jezika R može relativno jednostavno prikupiti javno dostupne e-mail adrese sa određene stranice. Studij slučaja koji ću prikazati isprogramirao sam s ciljem preuzimanja e-mail adresa banaka u BiH. Jednostavnim google pretraživanjem naišao sam na sljedeću stranicu. Na toj web adresi nalaze se e-mail adrese svih banaka u Federaciji i Republici Srpskoj. Specifičnost ovoga pothvata je u tome što e-mail adrese nisu dio texta (nisu unutar <p>
taga), nego su slika (tekst se nalazi unutar slike). U nastavku je opis kako programski preuzeti ove adrese koristeći R.
Glavni alat za ovakav projekt je poznati paket za web scraping u R-u, rvest. Prvo je potrebno učitati web stranicu kao html file:
library(tidyverse)
## -- Attaching packages ----------------------------------------------------------------------------------------------------------------------- tidyverse 1.2.1 --
## <U+221A> ggplot2 3.2.0 <U+221A> purrr 0.3.2
## <U+221A> tibble 2.1.3 <U+221A> dplyr 0.8.3
## <U+221A> tidyr 0.8.3 <U+221A> stringr 1.4.0
## <U+221A> readr 1.3.1 <U+221A> forcats 0.4.0
## -- Conflicts -------------------------------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(rvest)
## Loading required package: xml2
##
## Attaching package: 'rvest'
## The following object is masked from 'package:purrr':
##
## pluck
## The following object is masked from 'package:readr':
##
## guess_encoding
library(tesseract)
# get pictures links
p <- read_html("https://www.cbbh.ba/Content/Read/7", encoding = "UTF-8")
p
## {xml_document}
## <html>
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset= ...
## [2] <body class=" "> \r\n <div class="overlay"></div>\r\n <!-- ...
Output pokazuje status 200, što znači da je zahtjev prošao i da smo uspješno preuzeli web stranicu kao html dokument. Sljedeći korak je pronalaženje svih e-mail adresa na stranici. Za to ćemo koristiti dvije funkcije: html_nodes
i html_attr
. Prva funkcija izvlači dijelove HTML dokumenta prema zadanom XPath-u ili CSS selectoru, koji su posebno korisni u kombinaciji sa selectorgadget alatom koji omogućuje lako pronalaženje željenog dijela HTML dokumenta, odnosno poveznicu podatka koji se preuzima. Budući da su e-mailovi spremljeni kao slike, potražit ćemo sve dijelove HTML dokumenta koji imaju <img>
tag, a zatim izvući poveznicu na kojoj se nalazi slika izvlačenjem src
atributa. Postupak za to je sljedeći:
email <- p %>%
html_nodes("img") %>%
html_attr("src") %>%
.[stringr::str_detect(., "img_mails")]
email
## [1] "/data/images/img_mails/addico_bank.jpg"
## [2] "/data/images/img_mails/asa-banka-signature.png"
## [3] "/data/images/img_mails/bbi.png"
## [4] "/data/images/img_mails/intesasanpaolobanka.png"
## [5] "/data/images/img_mails/kibbanka.png"
## [6] "/data/images/img_mails/nlb.png"
## [7] "/data/images/img_mails/pbs-mail-2017.png"
## [8] "/data/images/img_mails/procreditbank.png"
## [9] "/data/images/img_mails/rbb-sarajevo.raiffeisen.png"
## [10] "/data/images/img_mails/rbfbih.png"
## [11] "/data/images/img_mails/sberbank.png"
## [12] "/data/images/img_mails/sparkasse.png"
## [13] "/data/images/img_mails/unicreditgroup.png"
## [14] "/data/images/img_mails/unionbank.png"
## [15] "/data/images/img_mails/vakuba.png"
## [16] "/data/images/img_mails/ziraatbosnia.png"
## [17] "/data/images/img_mails/addico_rs.png"
## [18] "/data/images/img_mails/kombank-bl.png"
## [19] "/data/images/img_mails/mfbanka.png"
## [20] "/data/images/img_mails/novabanka.png"
## [21] "/data/images/img_mails/pavlovic-banka.png"
## [22] "/data/images/img_mails/sberbankbl.png"
## [23] "/data/images/img_mails/unicreditgroup-bl.png"
Zadnja linija koda filtira samo one slike koje sadrže e-mail, to jest elemente vektora koji sadrže pojam “img_mails”. Output čine poveznice na slike koje sadrže e-mail adrese. Kada bi e-mailovi bili u tekstualnom fomatu, a ne slikovnom, posao bi bio ovdje završio. U samo tri linije koda bi preuzeli sve e-mail adrese sa stranice. Međutim, ovdje to nije slučaj. Sljedeći zadatak je preuzimanje svih slika pomoću poveznica i njihovo spremanje na lokalnom računalu. Ovo je relatinvo jednostavan zadatak i može se izvesti pomoću funkcije download.file
. Koristeći poveznice kao prvi argument, lokaciju za lokalno pohranjivanje kao drugi i model za spremanje kao treći argument, u samo jednoj liniji koda preuzimamo sve dokumente:
# doewnload pictures
for (i in 1:length(email)) {
download.file(paste0("https://www.cbbh.ba", email[i]), paste0("C:/Users/Mislav/Documents/email_", i, ".png"), mode = "wb")
}
Glavna funbkcija je uklopljena u for loop koji za svaki e-mail primjenjuje download.file
funkciju. Nakon što o smo preuzeli sve slike potrebno je napraviti samo još jedan korak, prepoznati tekst na slikama. Ovo je moguće pomoću poznatog open source paketa za čitanje teksta sa slika - tesseract
:
# ocr pictures
engine <- tesseract(language = "eng",
options = list(tessedit_char_whitelist = "0123456789abcdefghijklmnopqrstuvwxyz"))
emailPath <- list.files("C:/Users/Mislav/Documents", pattern = "email", full.names = TRUE)
emailOCR <- vector("character", length(emailPath))
for (i in 1:length(emailPath)) {
emailOCR[i] <- ocr(emailPath[i], engine = engine)
}
emailOCR <- trimws(emailOCR)
emailOCR
## [1] "into.toin@addiko.com"
## [2] "info@rbfbih.ba"
## [3] "info@sberbank.ba"
## [4] "info@sparkasse.ba"
## [5] "info@unicreditgroup.ba"
## [6] "info@unionbank.ba"
## [7] "vakufska@vakuba.ba"
## [8] "info@ziraatbosnia.com"
## [9] "info.rs.ba@addiko.com"
## [10] "office@kombank-bl.com"
## [11] "office@mfbanka.com"
## [12] "info@asabanka.ba"
## [13] "office@novabanka.com"
## [14] "office@paviovic-banka.com"
## [15] "info@sberbankbl.ba"
## [16] "info-bl@unicreditgroup.ba"
## [17] "info@bbi.ba"
## [18] "info@intesasanpaolobanka.ba"
## [19] "kibbanka@bih.net.ba"
## [20] "info@nlb.ba"
## [21] "info@pbs.ba"
## [22] "info@procreditbank.ba"
## [23] "info.rbbh@rbb-sarajevo.raiffeisen.at"
To je sve! Pomoću nekoliko redova koda preuzeli smo e-mail adrese sa web stranice, koje su prvotno bile prikazane kao slike. Ako se e-mailovi nalaze u <p>
tagovima, proces je znatno jednostavniji od prikaznog pa e-mail adrese možete preuzeti uz par linija koda.