-
Notifications
You must be signed in to change notification settings - Fork 0
/
handle_site.py
129 lines (106 loc) · 4.14 KB
/
handle_site.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
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import requests
from bs4 import BeautifulSoup
import re
import os
import sys
from time import sleep
from handle_page import HandlePage
import json
class HandleSite():
def __init__(self):
self.path_artigos = "./artigos"
self.URL = 'https://saense.com.br/page/'
self.ini = None
self.fim = None
self.lim = None
self.Prim_Art = None
self.Ult_Art = None
def extract(self):
nomearquivocontrole = "__controle.txt"
nomecompleto = os.path.join(self.path_artigos, nomearquivocontrole)
fcontrole = open(nomecompleto, "a+")
nomejsoncontrole = "__controle.json"
nomecompletojson = os.path.join(self.path_artigos, nomejsoncontrole)
try:
with open(nomecompletojson) as jfile:
jdata = json.load(jfile)
primeiro = jdata["primeiro"]
ultimo = jdata["ultimo"]
except: #json.decoder.JSONDecodeError:
jdata = open(nomecompletojson, "a+")
dict = {"primeiro": " ", "ultimo": " "}
json.dump(dict, jdata, indent=2)
primeiro = " "
ultimo = " "
## Iniciando variaveis auxiliares ##
a = True
contador = 0
controle_dict = {"primeiro": primeiro, "ultimo": ultimo}
for page in range(self.ini,self.lim):
fcontrole.write(str(page)+",")
response = requests.get(self.URL+str(page)+'/')
soup = BeautifulSoup(response.content, 'html.parser')
## Gerar lista de URLs dos artigos daquela pagina ##
artigostags = soup.body.find_all("a",{"class": "o-overlayLink"})
artigosurls = []
for link in artigostags:
artigosurls.append(link.get('href'))
## handle page ##
for art in artigosurls:
page = HandlePage(art)
page.getSoup()
page.getTitulo()
temp = art.split('/')
controle = temp[::-1][1]
if page.titulo == primeiro:
a = False
if a == True:
#print(controle)
if contador == 0:
controle_dict = {"primeiro": page.titulo, "ultimo": ""}
page.getTexto()
page.getAutor()
page.getData()
page.getImageUrl()
page.getJson()
try:
page.saveConteudo()
except Exception as e:
print("\nErro", e,"ao salvar Texto", page.titulo)
try:
page.saveJson()
except Exception as e:
print("\nErro", e,"ao salvar Json", page.titulo)
try:
page.saveImg()
except Exception as e:
print("\nErro", e,"ao salvar Imagem", page.titulo)
if page.titulo == ultimo:
a = True
contador += 1
print(".", end = '', flush=True)
print()
## Evitar sobrecarregar servidor do portal com frequencia alta de acessos ##
sleep(1)
## local variable 'controle_dict' referenced before assignment ##
controle_dict["ultimo"] = page.titulo
jcontrole = open(nomecompletojson, "w")
json.dump(controle_dict, jcontrole, indent=2)
fcontrole.close()
print("FIM.")
def main():
if sys.argv[1] == "--help" or sys.argv[1] == "-h":
print("""
Handle Site ( https://github.com/0xdferraz/Saense-PLN )
Extrai o texto, imagem e informacoes das postagens do Site Saense ( https://saense.com.br/ )
Uso: python handle_site.py <Pagina Inicial> <Pagina Final>
""")
exit()
else:
site = HandleSite()
site.ini = int(sys.argv[1]) #pagina inicial
site.fim = int(sys.argv[2]) #pagina final
site.lim = site.fim+1
site.extract()
if __name__ == "__main__":
main()