forked from renanstn/olx-scrap-de-produtos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
scrapper.py
54 lines (40 loc) · 1.65 KB
/
scrapper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import re
from datetime import date
from requests import get
from bs4 import BeautifulSoup
def web_scrap(produto_buscado):
''' Faz o web scrap no sit do olx e retorna uma lista de
dicionários com os itens encontrados. '''
url = 'https://sp.olx.com.br/grande-campinas?q={}'.format(produto_buscado)
# Regex que remove os \n, \r e \t dos textos
regex = re.compile('[\n\r\t]')
html = get(url)
soup = BeautifulSoup(html.text, 'html.parser')
lista_resultados = soup.find('ul', id='main-ad-list')
itens = lista_resultados.find_all('li')
itens_encontrados = []
for item in itens:
if item.has_attr('data-list_id'):
link = item.find('a')
# Titulo do produto
obj_titulo = link.find('h2', class_='OLXad-list-title')
titulo = regex.sub('', obj_titulo.text)
# Preço do produto
obj_preco = link.find('p', class_='OLXad-list-price')
if not obj_preco: # Não pegar produtos sem preços
continue
# Pegar o preço, removendo o cifrão e o ponto
preco = regex.sub('', obj_preco.text.replace('R$', '')).replace('.','').strip()
# Local do vendedor
obj_local = link.find('p', class_='text detail-region')
local = regex.sub('', obj_local.text)
# Link do anúncio
link_produto = link['href']
itens_encontrados.append({
'titulo' : titulo,
'preco' : preco,
'local' : local,
'link' : link_produto,
'data_pesquisa' : date.today()
})
return itens_encontrados