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 H4
etiqueta 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 openpyxl
biblioteca, primero creamos un libro de trabajo. En este libro, abrimos una hoja usando wb[‘Sheet’], donde escribiremos los datos. Usando la cell().value
funció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