Programa Python para encontrar organizaciones GSoC que usan un Lenguaje de Programación Particular

Actualmente, no es posible ordenar las organizaciones participantes de GSoC por los lenguajes de programación que usan en su código. Esto da como resultado que los estudiantes pasen mucho tiempo revisando la página de cada organización y clasificándolas manualmente.

Este artículo presenta una forma para que los estudiantes escriban su propia secuencia de comandos de Python utilizando la biblioteca BeautifulSoup4. Usando este guión, los estudiantes pueden encontrar la organización que usa el idioma en el que desean contribuir.

Aprenderá lo siguiente a través de este artículo:

  • Cómo usar la biblioteca de requests para enviar requests HTTPS a páginas web
  • Cómo usar la biblioteca BeautifulSoup4 en python para analizar el código HTML
  • Salida de datos en forma de hoja de cálculo (por ejemplo, MS Excel) usando OpenPyXL

Instalación

El módulo anterior no viene preinstalado con Python. Para instalarlos, escriba el siguiente comando en la terminal.

pip install requests
pip install beautifulsoup4
pip install openpyxl

Nota: Solo se requiere conocimiento de nivel principiante de Python 3 para seguir este artículo. Para obtener más información, consulte Lenguaje de programación Python

Empezando

Paso 1: importa las bibliotecas requeridas

import requests, bs4, openpyxl

Paso 2: Cree un objeto de respuesta usando Requests. Usaremos la página Archivo como nuestra fuente

# Replace "YEAR" by the year you
#  want to get data from. Eg. "2018"
url = 'https://summerofcode.withgoogle.com/archive/YEAR/organizations/'
  
# Creating a response object 
# from the given url
res = requests.get(url)
  
# We'll be using the Archive page
# of GSoC's website as our source.
# Checking the url's status
res.raise_for_status()

Paso 3: crea un objeto BeautifulSoup

Desde el código fuente de la página de archivo:

<li class="organization-card__container"
    layout
    flex-xs="100"
    flex-sm="50"
    flex="33"
    aria-label="AerospaceResearch.net">
    ...
        ...
    <div class="organization-card__footer md-padding">
      
        <h4 class="organization-card__name font-black-54">AerospaceResearch.net</h4>
  
    </div>
    ...
        ...
</li>

Podemos ver que el nombre de las Orgs está en una H4etiqueta con el nombre de clase “ organization-card__name font-black-54”.

Usando BS4, podemos buscar esta etiqueta en particular en el código HTML y almacenar el texto en una lista.

# Specify the language you
#  want to search for
language = 'python'
  
# BS4 object to store the 
# html text We use res.text 
# to get the html code in text format
soup = bs4.BeautifulSoup(res.text, 'html.parser')
  
# Selecting the specific tag 
# with class name
orgElem = soup.select('h4[class ="organization-card__name font-black-54"]')
  
  
# Similarly finding the links 
# for each org's gsoc page
orgLink = soup.find_all("a", class_="organization-card__link")
languageCheck = ['no'] * len(orgElem)
orgURL = ['none'] * len(orgElem)

Paso 4: abrir la página GSoC de cada organización y encontrar los idiomas utilizados

item = 0
# Loop to go through each organisation
for link in orgLink:
  
    # Gets the anchor tag's hyperlink
    presentLink = link.get('href') 
  
    url2 = 'https://summerofcode.withgoogle.com' + presentLink 
    print(item)
    print(url2)
    orgURL[item] = url2
    res2 = requests.get(url2)
    res2.raise_for_status()
  
    soup2 = bs4.BeautifulSoup(res2.text, 'html.parser')
    tech = soup2.find_all("li",
                      class_="organization__tag organization__tag--technology")
  
    # Finding if the org uses 
    # the specified language
    for name in tech:
  
        if language in name.getText():
            languageCheck[item] = 'yes'
  
    item = item + 1

Paso 5: escribir la lista en una hoja de cálculo

Usando la openpyxlbiblioteca, primero creamos un libro de trabajo. En este libro, abrimos una hoja usando wb[‘Sheet’], donde escribiremos los datos. Usando la cell().valuefunción, podemos escribir valores directamente en cada celda. Finalmente guardamos el libro de trabajo usando la save()función.

wb = openpyxl.Workbook()
sheet = wb['Sheet']
  
for i in range(0, len(orgElem)):
    sheet.cell(row = i + 1, column = 1).value = orgElem[i].getText()
    sheet.cell(row = i + 1, column = 2).value = languageCheck[i]
    sheet.cell(row = i + 1, column = 3).value = orgURL[i]
  
wb.save('gsocOrgsList.xlsx')

Nota: la hoja de cálculo se almacenará en el mismo directorio que el archivo de Python

Solución de problemas

Debido a repetidas requests al sitio web, el servidor puede bloquear su dirección IP después de repetidos intentos. El uso de una VPN resolverá este problema.
Si el problema persiste, agregue lo siguiente a su código:

from fake_useragent import UserAgent
  
ua = UserAgent()
header = {
    "User-Agent": ua.random
     }

Publicación traducida automáticamente

Artículo escrito por ParamChauhan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *