-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathartigos_scraper.py
91 lines (88 loc) · 3.65 KB
/
artigos_scraper.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
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
import re
import os
import time
import wget
timestr = time.strftime("%Y%m%d")
listaFinal = []
def rasparArtigo(itemFinal, pasta, nomeRevista, linkIssues):
'''
função para baixar PDF e dados do artigo
'''
item = itemFinal.find_all('td')
timestr = time.strftime("%Y-%m-%d")
# Acessa e itera em cada edição da revista
for issue in item:
try:
linkissue = issue.find('a')['href']
print('Acessando a edição: ' + linkissue +'\n')
req = urlopen(linkissue)
bs = BeautifulSoup(req.read(), 'lxml')
try:
em = bs.find('em').parent.parent
em = em.text
start = em.find('versão impressa ISSN ') + len('versão impressa ISSN ')
end = em.find('On-line')
ISSN1 = em[start:end - 7]
ISSN2 = em[end + len('On-line ISSN '):]
except:
ISSN1 = ''
ISSN2 = ''
tabelaGeral = bs.find(class_='content')
pdfArtigos = tabelaGeral.find_all('a',href=re.compile(r'/pdf/[a-z]*/'))
# Itera na lista de PDF de cada edição
for artigo in pdfArtigos:
link = artigo['href']
idArtigo = link.replace('/pdf/', '')
linkFinal = 'http://www.scielo.br' + link
fullName = idArtigo.replace('/','_')
path = os.path.join(pasta, fullName)
listaInterna = [nomeRevista, ISSN1, ISSN2, linkIssues, fullName]
listaFinal.append(listaInterna)
df = pd.DataFrame(listaFinal, columns=['Nome da Revista', 'ISSN - impresso', 'ISSN - digital', 'Link', 'ID do artigo'])
df.to_csv(f'{pasta}/infos_{timestr}.csv')
# Tenta realizar o download do PDF, se não for possível imprime o erro
try:
wget.download(linkFinal, path)
except Exception as e:
print (f'Erro ao baixar: {e}\n')
print(f'PDF: {fullName}')
pass
except:
pass
def dadosArtigo(itemFinal, pasta, nomeRevista, linkIssues):
'''
função para baixar apenas os dados do artigo
'''
item = itemFinal.find_all('td')
timestr = time.strftime("%Y-%m-%d")
for issue in item:
try:
linkissue = issue.find('a')['href']
print('Acessando a edição: ' + linkissue+'\n')
req = urlopen(linkissue)
bs = BeautifulSoup(req.read(), 'lxml')
try:
em = bs.find('em').parent.parent
em = em.text
start = em.find('versão impressa ISSN ') + len('versão impressa ISSN ')
end = em.find('On-line')
ISSN1 = em[start:end - 7]
ISSN2 = em[end + len('On-line ISSN '):]
except:
ISSN1 = ''
ISSN2 = ''
tabelaGeral = bs.find(class_='content')
pdfArtigos = tabelaGeral.find_all('a',href=re.compile(r'/pdf/[a-z]*/'))
for artigo in pdfArtigos:
link = artigo['href']
idArtigo = link.replace('/pdf/', '')
fullName = idArtigo.replace('/','_')
listaInterna = [nomeRevista, ISSN1, ISSN2, linkIssues, fullName]
listaFinal.append(listaInterna)
df = pd.DataFrame(listaFinal, columns=['Nome da Revista', 'ISSN - impresso', 'ISSN - digital', 'Link', 'ID do artigo'])
df.to_csv(f'{pasta}/infos_{timestr}.csv')
except:
pass