Posts Obtendo os telefones dos anunciantes da OLX com Python
Post
Cancel

Obtendo os telefones dos anunciantes da OLX com Python

O problema

Obter os números de telefone dos anunciantes da OLX.

A solução manual

Solução manual

O processo consiste em:

  1. obter a lista de anúncios;
  2. clicar no anúncio;
  3. clicar no link “ver número”;
  4. copiar o número. Obs: não tem como fazer Ctrl+C/Ctrl+V pois o número é uma imagem;
  5. repetir para cada anúncio.

A solução automatizada

Solução automatizada

O processo consiste em:

  1. obter a URL da lista de anúncios;
  2. executar o programa;
  3. ser FELIZ!

Como isso funciona?

Magic

1. Obtém a lista de anúncios utilizando a biblioteca urllib.

def get_site_html(url):
    try:
        html = urlopen(url)
        return html
    except HTTPError as e:
        print(e)
        return None

2. Lê o HTML utilizando a biblioteca BeautifulSoup:

def get_bsobj_from(html):
    try:
        bs_obj = BeautifulSoup(html.read(), "html.parser")
        return bs_obj
    except AttributeError as e:
        print(e)
        return None

3. Faz uma nova requisição para cada anúncio.

4. Procura pelo telefone na resposta. Obs: Ele é um arquivo GIF. :(

obj_anuncio = get_bsobj_from(html_anuncio)
if obj_anuncio is None:
    return None

span_visible_phone = obj_anuncio.find(id="visible_phone")
div_codigo_do_anuncio = obj_anuncio.find("div", {"class": "OLXad-id"})
codigo_do_anuncio = div_codigo_do_anuncio.p.strong.get_text()
anuncio["codigo"] = codigo_do_anuncio
phone = "Desconhecido"
if (span_visible_phone):
    imgurl = span_visible_phone.img['src']

    img = get_site_html(imgurl)
    if img is None:
        return None

5. Salva o GIF na pasta images.

gif_name = "images/" + codigo_do_anuncio + '.gif'
localFile = open(gif_name, 'wb')
localFile.write(img.read())
localFile.close()

6. Converte o GIF para PNG e salva.

def gif_to_png(gif):
    img = Image.open(gif)
    img.save(gif+".png",'png', optimize=True, quality=70)

7. Lê o texto da imagem utilizando a biblioteca pytesseract.

def image_to_text(file_name):
    phrase = ocr.image_to_string(Image.open(file_name))
    return phrase

8. Finalmente, salva os dados em um arquivo CSV utilizando a biblioteca csv do Python.

def dictionary_list_to_csv(dict_list):
    keys = dict_list[0].keys()
    csvfile = get_csv_file_name()
    print("Gravando o arquivo " + csvfile)
    with open(csvfile, "w") as output:
        writer = csv.DictWriter(output, fieldnames=keys, lineterminator='\n')
        writer.writeheader()
        writer.writerows(dict_list)

Referências:

This post is licensed under CC BY 4.0 by the author.

Trending Tags

Contents

Trending Tags