<jupyter_start><jupyter_text><jupyter_code>!apt -get update
!pip install Selenium 
!apt install chromium-chromedriver

from bs4 import BeautifulSoup
#Pega o html da página

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#Permite a interação com a página alterando o estado dela ou navegando através do site

import requests
#Possibilita fazer a requisição para a página

import json
#Modulo para salvar em .json

import re
#Filtragem dos textos

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
#Configurações do Driver que vai interagir com a página simulando um navegador Chrome
#É através do drive que o Selenium interage

driver.get("https://www.r7.com/")
#Passando o link com o qual o driver vai interagir
driver.execute_script("window.scrollTo(0, 55000)")
#Mandando o site rolar até os pixeis pedidos, caso quiser subi é só colocar o valor negativo

soup = BeautifulSoup(driver.page_source, 'html.parser')
#passando o html do drive para a página, também pode ser feito passando uma url

a = soup.findAll('main', attrs={'class':'widget-24x1-ultimas__articles tab_5d8d9785ca908444b7001d21 tab tab--active'})
b = soup.findAll('div', attrs={'class':'widget-24x1-ultimas__img'})
#filtrando através das tags

links = []
for elemento in b:
  if(re.search(r"http:\/\/noticias\.r7\.com.*", elemento.a['href']) != None):
    links.append(elemento.a['href'])
#Passando de notícia em notícia para coletar a url 
    
rpt = 0
dicionario = {}

print(len(links))
#Printando a quantia de noticias que vamos analisar

for link in links:
  url = link

  print(rpt)
  rpt = rpt+1
  #print para poder se orientar quanto falta para acabar a extração dos dados

  headers = {
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0',
  }
  #Simulando um Mozilla, pra não ocorrer erro de autentificação

  try:
    response = requests.get(url, headers=headers)
    data = response.text
    soup = BeautifulSoup(data, 'html.parser')
    #Coletando o html para o BeautifulSoup

    
    title = soup.find('h1', attrs={'class':['toolkit-title', 'title text-big']}).text
    #Coletando o titulo que está vinculado a tag <h1>

    latim = soup.findAll('p', attrs={'class':''})
    #Coletando todos os parágrafos vinculados as tags <p>

    title = re.sub("\\s+", " ", title)
    #"\\s+" -> é a regra usada no regex para remover símbolos
    #Que vai ser substituida por um espaço -> " "
    #No texto fornecido, no caso a variável title

    title = re.findall(r"\w.*\w", title)

    

    cont=0
    for partes in latim:
      cont = cont + len(partes.text)
      #Contando a quantia de caracteres pra não pegar textos curtos demais

    text_temp = ""
    for partes in latim:
      partes = partes.text
      text_temp = text_temp+partes
    regex = re.compile(r'[\n\t\r]')
    text_temp = regex.sub(" ", text_temp)
    #Limpando texto de símbolos e juntando todas as linhas que estavam separadas na lista
    

    if(cont>300):
      dicionario.update({"is_sarcastic:": ""})
      dicionario.update({"article_link":url})
      dicionario.update({"headline":title[0]})
      dicionario.update({"text":text_temp})
      #Adicionando ao dicionário os textos para já ficar no formato antes de salvar no .json
      #O formato será: {"is_sarcastic:": "", "article_link": link, "headline": título, "text": texto}

      with open("R7.json", "a", encoding='utf8') as outfile:
        json.dump(dicionario, outfile, ensure_ascii=False)
        outfile.write("\n")
    
  except:
        print("nossa um erro!!")<jupyter_output>229
0
A Feira Livre, Feira de Gado e a Feira de Motos que acontecem sempre aos sábados, em Monteiro, foram antecipadas para esta sexta-feira (12) e a para a próxima sexta-feira (19). A medida está disposta no decreto municipal publicado na manhã desta quinta-feira (11).Para a prefeita <NAME>, a antecipação foi motivada pelo fechamento de bares, restaurantes e outros comércios nos dias 13, 14, 20 e 21 conforme estabelece o decreto. “A feira de verdura poderá acontecer também aos sábados, mas, tendo em vista que apenas mercadinhos e serviços de saúde permanecerão abertos, ficaria melhor tanto para os consumidores, principalmente os da zona rural, e para os vendedores, que a comercialização aconteça apenas na sexta-feira, quando todo o restante dos empreendimentos está funcionando normalmente”, disse ela.
1
   O aumento de 20% nos atendimentos nas unidades de emergência e urgência do município do Rio acendeu um alerta vermelho, afirmou o prefeito <NAME>. Do final do ano passado[...]
{'fraction_non_alphanumeric': 0.10020408163265306, 'fraction_numerical': 0.017346938775510204, 'mean_word_length': 4.094594594594595, 'pattern_counts': {'":': 8, '<': 8, '<?xml version=': 0, '>': 11, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '152794', 'license': 'MIT', 'n_tokens_mistral': 1770, 'n_tokens_neox': 1683, 'n_words': 552, 'path': 'Crawler_R7.ipynb', 'repo_name': 'Laelapz/Crawlers', 'size': '4911'}