This repository was archived by the owner on Oct 22, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcrawler.py
More file actions
80 lines (67 loc) · 2.93 KB
/
Copy pathcrawler.py
File metadata and controls
80 lines (67 loc) · 2.93 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import requests
from bs4 import BeautifulSoup
import sqlite3
from urllib.parse import urljoin
# Função para criar o banco de dados e tabela
def criar_banco():
conn = sqlite3.connect('dados_web.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS resultados (
id INTEGER PRIMARY KEY AUTOINCREMENT,
titulo TEXT,
url TEXT
)
''')
conn.commit()
conn.close()
print("Banco de dados criado/verificado com sucesso!")
# Função para verificar se a URL já existe no banco de dados
def verificar_url_existe(cursor, url_link):
cursor.execute('SELECT COUNT(*) FROM resultados WHERE url = ?', (url_link,))
return cursor.fetchone()[0] > 0
# Função para inserir múltiplos dados no banco
def inserir_dados(novos_dados):
conn = sqlite3.connect('dados_web.db')
cursor = conn.cursor()
cursor.executemany('INSERT INTO resultados (titulo, url) VALUES (?, ?)', novos_dados)
conn.commit()
conn.close()
print(f"{len(novos_dados)} novos dados inseridos com sucesso!")
# Função para coletar dados da web e armazenar no banco
def crawler(url, dominio_base=None):
try:
print(f"Coletando dados de: {url}")
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers, verify=False)
response.raise_for_status() # Lança exceção se houver erro HTTP
soup = BeautifulSoup(response.text, 'html.parser')
novos_dados = []
conn = sqlite3.connect('dados_web.db')
cursor = conn.cursor()
for link in soup.find_all('a', href=True):
titulo = link.get_text(strip=True)
url_link = link['href']
# Normaliza URLs relativas para completas
if dominio_base:
url_link = urljoin(dominio_base, url_link)
# Adiciona ao banco somente URLs válidas e não duplicadas
if titulo and url_link and not verificar_url_existe(cursor, url_link):
novos_dados.append((titulo, url_link))
conn.close()
if novos_dados:
inserir_dados(novos_dados)
else:
print("Nenhum dado válido encontrado na página.")
except requests.exceptions.RequestException as e:
print(f"Erro ao acessar {url}: {e}")
# Configuração inicial e execução do crawler
if __name__ == "__main__":
# Criar/verificar banco de dados e tabela
criar_banco()
# Executar o crawler para coletar dados de múltiplos sites
crawler("https://www.python.org", dominio_base="https://www.python.org")
crawler("https://flask.palletsprojects.com", dominio_base="https://flask.palletsprojects.com")
crawler("https://lilith.uno/", dominio_base="https://lilith.uno")