CoderCastrov logo
CoderCastrov
Питон

Парсинг бразильского новостного сайта

Парсинг бразильского новостного сайта
просмотров
2 мин чтение
#Питон
Table Of Content

    Это мой первый пост на этом сайте, поэтому я решил сделать его простым. Я быстро объясню код, который я использовал для парсинга известного сайта в Бразилии. Речь идет о 'estadão.com.br'.

    Моя цель при парсинге этого сайта была получить данные для обучения модели Bert. Для этого мне понадобились заголовки новостей и день их публикации, а также тема и имя автора.

    Я покажу код по частям, потому что так проще объяснить.

    from bs4 import BeautifulSoup 
    import requests
    import pandas as pd

    Как вы можете видеть, я импортировал ничего особенного. Я использовал хороший и старый "BeautifulSoup" и "requests". Это два пакета, которые мне понадобились для парсинга сайта. Я также импортировал pandas для создания и сохранения созданного в процессе парсинга набора данных.

    objetivo = 7910
    NOTICIAS = []
    pagina = 1

    Да, мои переменные на португальском.

    Итак, перейдем к вашему, вероятно, первому уроку португальского языка. "objetivo" означает "цель". Эта переменная определяет количество страниц, которые мы хотим спарсить. В данном случае мне нужно спарсить 7910 страниц, чтобы получить все заголовки о финансах в журнале.

    "NOTICIAS" означает "новости". Это список, который будет содержать всю информацию о новостях. И "pagina" означает "страница". Эта переменная указывает на страницу, которую парсит код.

    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
              'origin' : '[https://www.estadao.com.br'](https://www.estadao.com.br'),
              'referer' : '[https://api.estadao.com.br/login'](https://api.estadao.com.br/login')}
    s = requests.session()
    payload = {
         'set_cookies' : '1',
         'email' : '[y](mailto:paulosknupp@yahoo.com)ourmail',
         'password': 'yourpassword' 
     }
    response = s.post("[https://www.estadao.com.br](https://www.estadao.com.br)", headers=headers, data = payload)
    cookies = response.cookies

    Вышеуказанный код позволяет вам войти на сайт. Я получил его из следующего видео:

    Теперь мы можем начать парсить страницы, содержащие заголовки.

    while pagina < objetivo: 
        url = '[https://economia.estadao.com.br/ultimas,'](https://economia.estadao.com.br/ultimas,') + str(pagina)
        fonte = requests.get(url, headers = headers)
        soup = BeautifulSoup((fonte).text, 'lxml')
        caixas_noticias = soup.find_all("section", {"class": "col-md-12 col-sm-12 col-xs-12 init item-lista"})
        for caixa in caixas_noticias:    NOTICIA ={}    try:
          titulo = caixa.find("h3", {"class": "third"}).getText()
        except:
           titulo = "NA"
       
        NOTICIA["TITULO"] = titulo    try:
          data = caixa.find("span", {"data-posts"}).getText().split("|")
          dia = data[0]
          hora = data[1]
        except:
          data = "NA"
          dia = "NA"
          hora = "NA"
        NOTICIA["DIA"] = dia
        NOTICIA["hora"] = hora    NOTICIAS.append(NOTICIA)    pagina = pagina + 1

    В этой части кода я хочу продолжать парсить, пока номер страницы меньше моей цели. Таким образом, в данном случае цикл будет продолжаться, пока страница не станет равной 7909. Номер страницы обновляется в конце каждой итерации цикла.

    Важно отметить, что страница, которую нужно спарсить, зависит от обновлений страниц. Если не указано, цикл будет продолжать парсить одну и ту же страницу.

    Для каждой итерации мы определяем URL в соответствии с номером страницы и переопределяем словарь "noticia", который будет содержать информацию о каждом заголовке. В конце итерации информация из этого словаря отправляется в список "NOTICIAS".

    dataset = pd.DataFrame(NOTICIAS)
    dataset.to_csv("VALOR_ECONOMICO_HEADLINES.csv", sep=";", index= False, encoding = 'utf-8-sig')

    В конце все, что мне нужно сделать, это преобразовать список "NOTICIAS" в таблицу данных и сохранить ее. В данном случае я сохранил ее в формате CSV, но вы можете выбрать любой другой формат. Надеюсь, это вам поможет!