Пример #1
0
def scrap(driver, data):
    #Atualiza o soup com o novo html (contento todos os posts carregados)
    try:
        soup = BeautifulSoup(driver.page_source, 'html.parser')
    except:
        print('Erro ao conectar-se com a nova página.')
        return -1

    # ---------- Scraping dos posts do Agile Alliance carregados
    posts = soup.select_one('ul.aa-search__results').find_all(
        'li', 'wrap')  #Pegando todos os posts
    print(len(posts))

    for post in posts:

        #Recebemos o tipo
        tipo_post, _type = findType(post)

        #Recebemos o título
        titulo_post = post.select_one('span.aa-result-card__name-content')
        if titulo_post == None:
            titulo_post = ''
        else:
            titulo_post = titulo_post.text.strip()
        print(titulo_post)

        #Recebendo o href (faz uso do type, extraido em postType.py)
        try:
            href = post.select_one(
                f'a.aa-result-card.aa-result-card--{_type}').get('href')
            link_post = str(href)
        except AttributeError:
            link_post = ''

        try:
            autor_post = post.select_one('p.aa-result-card__meta').select_one(
                'span')
            autor_post = autor_post.text.strip()
        except AttributeError:
            autor_post = ''

        #Recebendo data
        data_post = post.select_one('time.aa-result-card__created')
        if data_post == None:
            data_post = ''
        else:
            data_post = converterData(data_post.text)
            '''data_post = datetime.strptime(data_post.text, '%-m/%-d/%-y')
            data_post = data_post.strftime('%d/%m/%Y')'''

        #Recebendo a descrição
        descricao_post = post.select_one(
            'span.aa-result-card__description-content')
        if descricao_post == None:
            descricao_post = ''
        else:
            descricao_post = descricao_post.text.strip()

            #Salvando no dicionario do dataframe
        data['tipo'].append(tipo_post)
        data['titulo'].append(titulo_post)
        data['link'].append(link_post)
        data['autor'].append(autor_post),
        data['data'].append(data_post)
        data['descricao'].append(descricao_post)
Пример #2
0
def scr_search_page(soup, lastPage, data, search_index):
    page_exist = True
    num_pag = 0
    tipo_post = type_by_index(search_index)

    while page_exist:

        #posts_div_selector = 'view.view-content-search.view-id-content_search.view-display-id-article_search_page.resource-search.view-dom-id-fac100a8fa9502db56c377e7efd4aa19'

        if search_index != 4:
            try:
                #list_posts = soup.select_one('div', {'class': posts_div_selector }).select_one('div.view-content').find_all('div.views-row')
                first_post = [
                    soup.select_one('div.view-content').select_one('div')
                ]
                list_posts = first_post + soup.select_one(
                    'div.view-content').select_one('div').find_next_siblings(
                        'div')
                #print(len(list_posts))

            except:
                print('- Nenhum resultado encontrado.')
                break
        else:
            try:
                #list_posts = soup.select_one('div', {'class': posts_div_selector }).select_one('div.view-content').find_all('div.views-row')
                first_post = [
                    soup.select_one('div.view-content').select_one(
                        'tbody').select_one('tr')
                ]
                list_posts = first_post + soup.select_one(
                    'div.view-content').select_one('tbody').select_one(
                        'tr').find_next_siblings('tr')
                #print(len(list_posts))

            except:
                print('* Nenhum resultado encontrado.')
                break

        #Por poster encontrado na página:
        for post in list_posts:
            print('--- pag ---\n')

            #Recebendo o título
            if search_index != 4:
                titulo_post_tag = post.select_one('h3.title').select_one('a')
                if titulo_post_tag == None:
                    titulo_post = ''
                else:
                    titulo_post = titulo_post_tag.text.strip()

                #Recebendo autor
                try:
                    autor_post = post.select_one(
                        'div.field.field-name-author.field-type-ds.field-label-hidden'
                    ).select_one('a')
                except AttributeError:
                    #Em presentations tem estrutura diferenciada
                    autor_post = post.select_one(
                        'div.field.field-name-field-author.field-type-text.field-label-hidden'
                    ).select_one('div.field-item.even')

                if autor_post == None:
                    autor_post = ''
                else:
                    autor_post = autor_post.text.strip()

                #Recebendo a descrição
                descricao_post = post.select_one(
                    'div.field.field-name-body.field-type-text-with-summary.field-label-hidden'
                ).select_one('p')
                if descricao_post == None:
                    descricao_post = ''
                else:
                    descricao_post = descricao_post.text.strip()

            else:
                #recebendo titulo e autor
                titulo_post_tag = post.select_one('h3').select_one('a')
                list_titulo_post_tag = titulo_post_tag.text.split('|')

                if len(list_titulo_post_tag) == 2:
                    titulo_post, autor_post = list_titulo_post_tag
                else:
                    titulo_post, autor_post = [
                        list_titulo_post_tag[0].strip(), ' '
                    ]

                #Recebendo descrição
                descricao_post = post.select_one('h3').next_sibling
                #print(descricao_post)

            #Recebendo o href do titulo -> tranformar no link completo
            href = titulo_post_tag.get('href')
            if href == None:
                link_post = ''
            else:
                link_post = str(href)
                if 'https://' not in link_post and 'http://' not in link_post:
                    if 'https/' not in link_post:
                        link_post = 'https://www.agileconnection.com' + link_post
                    else:
                        link_post.replace("https/", "https://")

            #Recebendo data
            data_post = post.select_one('div.field.field-name-post-date')
            if data_post == None:
                data_post = ''
            else:
                data_post = converterData(data_post.text.replace('-', ''))

                #Salvando no dicionario do dataframe
            data['tipo'].append(tipo_post)
            data['titulo'].append(titulo_post)
            data['link'].append(link_post)
            data['autor'].append(autor_post)
            data['data'].append(data_post)
            data['descricao'].append(descricao_post)

            #Checando se existe uma próxima página
        num_pag += 1
        if num_pag >= lastPage:
            break

        try:
            pag = 'https://www.agileconnection.com' + soup.select_one(
                'li.pager-next').find('a').get('href')
        except:
            page_exist = False
            print('Próxima página não encontrada.')
            break

            #Conectando com a próxima página
        try:
            html = requests.get(pag)
            soup = BeautifulSoup(html.text, 'html.parser')
        except:
            print(f'Erro 2 ao conectar-se com {pag}')
            break
Пример #3
0
def scr_page(soup, lastPage, selec, data, search_index):
    page_exist = True
    num_pag = 0

    tipo_post = type_by_index(search_index)

    while page_exist:

        #Por poster encontrado na página:
        num_posts = 0
        for post in soup.select_one('div', {'id': 'content'}).find_all('tr'):

            #Recebendo o título
            try:
                titulo_post_tag = post.select_one(
                    selec['title']).select_one('a')
                print('PASSOU', titulo_post_tag.text.strip())

                if search_index != 4:
                    titulo_post = titulo_post_tag.text.strip()
                else:
                    list_titulo_post_tag = titulo_post_tag.text.split('|')

                    if len(list_titulo_post_tag) == 2:
                        titulo_post, autor_post = list_titulo_post_tag
                    else:
                        titulo_post, autor_post = [
                            list_titulo_post_tag[0], ' '
                        ]

            except:
                break

            #Recebendo o href do titulo -> tranformar no link completo
            href = titulo_post_tag.get('href')
            if href == None:
                link_post = ''
            else:
                link_post = str(href)
                if 'http://' not in link_post and 'https://' not in link_post:
                    if 'https/' not in link_post:
                        link_post = 'https://www.agileconnection.com' + link_post
                    else:
                        link_post.replace("https/", "https://")

            #Recebendo autor
            if search_index != 4:
                autor_post = post.select_one(selec['autor'])
                try:
                    autor_post = autor_post.select_one(
                        'a.username').text.strip()  #Raise error????
                    if autor_post == None:
                        raise Exception
                except:
                    autor_post = autor_post.text.strip()

            if autor_post == None:
                autor_post = ''

            #Recebendo data
            data_post = post.select_one(selec['date'])
            if data_post == None:
                data_post = ''
            else:
                data_post = converterData(data_post.text)

            #Recebendo a descrição
            descricao_post = post.select_one(selec['teaser']).select_one('p')
            if descricao_post == None:
                descricao_post = ''
            else:
                descricao_post = descricao_post.text.strip()

                #Salvando no dicionario do dataframe
            data['tipo'].append(tipo_post)
            data['titulo'].append(titulo_post)
            data['link'].append(link_post)
            data['autor'].append(autor_post)
            data['data'].append(data_post)
            data['descricao'].append(descricao_post)

            num_posts += 1
            if search_index != 4:
                if num_posts >= 10:
                    break
            else:
                if num_posts >= len(
                        soup.select_one('div', {
                            'id': 'content'
                        }).find_all(
                            'tr')) - 14:  #Sempre há 14 elementos do intrusos
                    break

            #Checando se existe uma próxima página
        '''num_pag += 1
        if num_pag >= lastPage:
            break'''

        try:
            pag = 'https://www.agileconnection.com' + soup.select_one(
                'li.pager-next').find('a').get('href')
        except:
            page_exist = False
            print('Próxima página não encontrada.')
            break

            #Conectando com a próxima página
        try:
            html = requests.get(pag)
            soup = BeautifulSoup(html.text, 'html.parser')
        except:
            print(f'Erro ao conectar-se com {pag}')
            break
def scrum_scraper():
    print("Iniciando execuação no Scrum ...")
    for page in range(0, 9999):
        break_next = False

        try:
            html = requests.get(
                'https://www.scrum.org/resources?trainer_only_enable=0&page={}'
                .format(str(page)))
            soup = BeautifulSoup(html.text, 'html.parser')
        except:
            print('Erro ao conectar-se com o servidor')
            break

            #Conferindo se a página existe -> (no scrum n dá erro, ent precisa conferir):
        try:
            link_pag_atual = soup.find(
                'li', 'pager__item is-active').find('a').get('href')
            if ('page=' + str(page)) not in str(link_pag_atual):
                break

        except:  #Se não existir 'pager__item is-active', só executa essa vez
            break_next = True

            #Análise Scrum.org

        #Por poster encontrado na página:
        for poster in soup.select('.list-view-item'):
            #Recebemos o tipo
            tipo_poster = poster.select_one('.list-view-item-type')
            #Tratamento
            if tipo_poster == None:  #Caso o tipo não exista
                tipo_poster = ''
            else:
                tipo_poster = tipo_poster.text.strip()

                #Recebemos o título
            titulo_poster_tag = poster.select_one('.list-view-item-title')
            if titulo_poster_tag == None:
                titulo_poster = ''
            else:
                titulo_poster = titulo_poster_tag.text.strip()

            #Se o titulo já existir na database, para aqui
            if titulo_poster in all_titles:
                break_next = True
                break

            #Recebendo o href do titulo -> tranformar no link completo
            href = titulo_poster_tag.get('href')
            if href == None:
                link_poster = ''
            else:
                link_poster = 'https://www.scrum.org' + str(href)

            #Recebendo data
            data_poster = poster.select_one('.list-view-item-date')
            if data_poster == None:
                data_poster = ''
            else:
                data_poster = converterData(data_poster.text)

            #Recebendo a descrição
            descricao_poster = poster.select_one('.list-view-item-teaser')
            if descricao_poster == None:
                descricao_poster = ''
            else:
                descricao_poster = descricao_poster.text.strip()

                #Salvando no dicionario do dataframe
            data['tipo'].append(tipo_poster)
            data['titulo'].append(titulo_poster)
            data['link'].append(link_poster)
            data['data'].append(data_poster)
            data['descricao'].append(descricao_poster)

        if break_next:
            break

    return data
                'list-view-item-title')
            titulo_post = titulo_post_tag.text.strip()
        except:
            titulo_post = ''

            #recebendo link pelo tag titulo
        href = titulo_post_tag.get_attribute('href')
        if href == None:
            link_post = ''
        else:
            link_post = href

            #recebendo data
        try:
            data_post = post.find_element_by_class_name('list-view-item-date')
            data_post = converterData(data_post.text)
        except:
            data_post = ''

            #recebendo descrição / teaser
        try:
            descricao_post = post.find_element_by_class_name(
                'list-view-item-teaser').text.strip()
        except:
            descricao_post = ''

        #Salvando no dicionario do dataframe
        data['tipo'].append(tipo_post)
        data['titulo'].append(titulo_post)
        data['link'].append(link_post)
        data['data'].append(data_post)
Пример #6
0
def scr_paper_page(soup, lastPage, data):
    page_exist = True

    while page_exist:

        #Por poster encontrado na página:
        num_posts = 0
        for post in soup.select_one('div', {'id': 'content'}).find_all('tr'):

            #Recebendo o título
            try:
                titulo_post_tag = post.select_one(
                    'td.views-field.views-field-title').select_one('a')
                print('PASSOU', titulo_post_tag.text.strip())
                titulo_post = titulo_post_tag.text.strip()
            except:
                break

            titulo_post, autor_post = titulo_post.split('|')
            print(titulo_post, autor_post)
            #Recebendo o href do titulo -> tranformar no link completo
            href = titulo_post_tag.get('href')
            if href == None:
                link_post = ''
            else:
                link_post = 'https://www.agileconnection.com' + str(href)

            #Recebendo autor
            #autor_post = post.select_one('div.field-name-user-row').select_one('a')
            if autor_post == None:
                autor_post = ''
            else:
                autor_post = autor_post.strip()

            #Recebendo data
            data_post = post.select_one('div.field-post-date')
            if data_post == None:
                data_post = ''
            else:
                data_post = converterData(data_post.text)

            #Recebendo a descrição
            descricao_post = post.select_one(
                'td.views-field.views-field-title').select_one('p')
            if descricao_post == None:
                descricao_post = ''
            else:
                descricao_post = descricao_post.text.strip()

            tipo_poster = 'White Paper'

            #Salvando no dicionario do dataframe
            data['tipo'].append(tipo_poster)
            data['titulo'].append(titulo_post)
            data['link'].append(link_post)
            data['autor'].append(autor_post)
            data['data'].append(data_post)
            data['descricao'].append(descricao_post)

            num_posts += 1
            if num_posts >= 10:
                break

            #Checando se existe uma próxima página
        '''num_pag += 1
        if num_pag >= lastPage:
            break'''

        try:
            pag = 'https://www.agileconnection.com' + soup.select_one(
                'li.pager-next').find('a').get('href')
        except:
            page_exist = False
            break

            #Conectando com a próxima página
        try:
            html = requests.get(pag)
            soup = BeautifulSoup(html.text, 'html.parser')
        except:
            print(f'Erro ao conectar-se com {pag}')
            break
Пример #7
0
def scrum_scraper(s_nome, s_tag, s_tipo, firstPg, lastPg):

    #intervalo de págs que deseja raspar
    firstPage = firstPg
    lastPage = lastPg

    #filtrar -> searchScrum(s_nome, s_tag, s_tipo)
    #Tratamento de parâmetros
    params = []
    if isinstance(s_nome, str) and s_nome is not None:
        params.append(s_nome)
    if isinstance(s_tag, str) and s_tag is not None:
        params.append(s_tag)
    if isinstance(s_tipo, str) and s_tipo is not None:
        params.append(s_tipo)

    search = searchScrum(
        *params)  #retorna parte da url formata pelos parâmetros

    break_next = False

    for page in range(firstPage, lastPage):

        try:
            html = requests.get(
                'https://www.scrum.org/resources?{}trainer_only_enable=0&page={}'
                .format(search, str(page)))
            soup = BeautifulSoup(html.text, 'html.parser')
        except:
            print('Erro ao conectar-se com o servidor')
            break

            #Conferindo se a página existe -> (no scrum n dá erro, ent precisa conferir):
        try:
            link_pag_atual = soup.find(
                'li', 'pager__item is-active').find('a').get('href')
            print('page=' + str(page))
            if ('page=' + str(page)) not in str(link_pag_atual):
                break

        except:  #Se não existir 'pager__item is-active', só executa essa vez
            break_next = True

            #Análise Scrum.org

        #Por poster encontrado na página:
        for poster in soup.select('.list-view-item'):
            #Recebemos o tipo
            tipo_poster = poster.select_one('.list-view-item-type')
            #Tratamento
            if tipo_poster == None:  #Caso o tipo não exista
                tipo_poster = ''
            else:
                tipo_poster = tipo_poster.text.strip()

                #Recebemos o título
            titulo_poster_tag = poster.select_one('.list-view-item-title')
            if titulo_poster_tag == None:
                titulo_poster = ''
            else:
                titulo_poster = titulo_poster_tag.text.strip()

            #Recebendo o href do titulo -> tranformar no link completo
            href = titulo_poster_tag.get('href')
            if href == None:
                link_poster = ''
            else:
                link_poster = 'https://www.scrum.org' + str(href)

            #Recebendo data
            data_poster = poster.select_one('.list-view-item-date')
            if data_poster == None:
                data_poster = ''
            else:
                data_poster = converterData(data_poster.text)
            """if data_filtro == False: #Se n estiver de acordo com o intervalo de tempo, pula esse resultado
                continue"""

            #Recebendo a descrição
            descricao_poster = poster.select_one('.list-view-item-teaser')
            if descricao_poster == None:
                descricao_poster = ''
            else:
                descricao_poster = descricao_poster.text.strip()

                #Salvando no dicionario do dataframe
            data['tipo'].append(tipo_poster)
            data['titulo'].append(titulo_poster)
            data['link'].append(link_poster)
            data['data'].append(data_poster)
            data['descricao'].append(descricao_poster)

        if break_next:
            break
    '''if len(data['titulo']) > 0: #se algum resultado for capturado

            # ---- Salvando resultado
        df = pd.DataFrame(data, columns = ['tipo', 'titulo', 'link', 'data', 'descricao']) #-> criando dataframe

            # ---- Exportando para excel(xlsx) e/ou csv
        excel_file, csv_file = exportar_df(df, 'xlsx', 'csv', wb='S')'''

    print('FIM DA EXECUÇÃO')

    return data
Пример #8
0
        else:
            titulo_poster = titulo_poster_tag.text.strip()

        #Recebendo o href do titulo -> tranformar no link completo
        href = titulo_poster_tag.get('href')
        if href == None:
            link_poster = ''
        else:
            link_poster = 'scrum.org' + str(href)

        #Recebendo data
        data_poster = poster.select_one('.list-view-item-date')
        if data_poster == None:
            data_poster = ''
        else:
            data_poster = converterData(data_poster.text)

        #Recebendo a descrição
        descricao_poster = poster.select_one('.list-view-item-teaser')
        if descricao_poster == None:
            descricao_poster = ''
        else:
            descricao_poster = descricao_poster.text.strip()

            #Salvando no dicionario do dataframe
        data['tipo'].append(tipo_poster)
        data['titulo'].append(titulo_poster)
        data['link'].append(link_poster)
        data['data'].append(data_poster)
        data['descricao'].append(descricao_poster)