`.\n",
+ "* Guarda esas filas filtradas en rows.\n",
+ "* Imprime las primeras 5 filas para que puedas revisar su contenido HTML.\n",
+ "* Es una forma de filtrar y limpiar el conjunto completo de filas para quedarte solo con las que contienen la información útil y evitar filas vacías o irrelevantes."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -488,6 +690,13 @@
"print(example_row.prettify())"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* Muestra la tercera fila (índice 2) de la lista rows con el HTML bien ordenado para facilitar su lectura."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -518,6 +727,18 @@
"print()"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "*El código muestra cómo obtener las celdas de una fila usando tres filtros:\n",
+ "\n",
+ "* Todas las `| `.\n",
+ "* Todos los elementos con clase .detail.\n",
+ "* Solo las ` | ` que tienen clase .detail.\n",
+ "* Esto te ayuda a entender cómo filtrar las partes específicas del HTML según tus necesidades."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -536,6 +757,13 @@
"assert example_row.select('td') == example_row.select('.detail') == example_row.select('td.detail')"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* Esta línea verifica que las tres formas de seleccionar celdas devuelven exactamente los mismos elementos en example_row."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -554,6 +782,14 @@
"detail_cells"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* Este código selecciona solo las celdas | que tienen la clase detail dentro de example_row y guarda esa lista en detail_cells.\n",
+ "* Después muestra esa lista con las celdas filtradas."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -573,6 +809,16 @@
"print(row_data)"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* Toma cada celda filtrada en detail_cells.\n",
+ "* Extrae solo el texto visible de cada celda usando .text.\n",
+ "* Guarda todos esos textos en la lista row_data.\n",
+ "* Finalmente, imprime esa lista con el contenido limpio y legible de la fila."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -591,6 +837,15 @@
"print(row_data[4]) # Party"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* Esto imprime datos específicos de la fila extraída, ejemplo:\n",
+ " row_data[3]: distrito\n",
+ "* Así accedes fácilmente a cada dato clave dentro de la fila.\n"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -611,6 +866,14 @@
"print('Last Row:\\n', rows[-1])"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* Imprime el contenido HTML completo de esas filas para que puedas revisarlas y entender su estructura.\n",
+ "* Debido a que hay que realizar una limpieza de filas porque no todas corresponderían a un senador."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -635,6 +898,14 @@
"print(len(rows[3]))"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* En teoría se emprimen dos filas vacios o con pocos elementos, por eso se consideran \"malas\" o irrelevantes.\n",
+ "* Y en las otras 2 y 3 serían las buenas, por que la URL no esta funcionando no se puede visualizar."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -656,6 +927,13 @@
"print(good_rows[-1])"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* Filtra solo las filas con 5 elementos (las que contienen datos útiles) y muestra algunas para verificar que están correctas."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -692,6 +970,19 @@
"print(good_rows[-1])"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "La primera fila (rows[-1]) mostraría una fila vacía o de pie de página, ya que no tiene celdas td.detail.\n",
+ "\n",
+ "La fila rows[5] mostraría una fila válida con datos de un senador.\n",
+ "\n",
+ "El nuevo filtrado crea good_rows con solo las filas que mostrarían al menos una celda td.detail, es decir, filas con información útil.\n",
+ "\n",
+ "Se imprimen la primera y última fila filtrada para verificar si el resultado es correcto."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -738,6 +1029,23 @@
" members.append(senator)"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Este código realiza el scraping completo y organizado de los senadores.\n",
+ "* Crea una lista members para almacenar los datos.\n",
+ "* Filtra las filas útiles (que tienen celdas con clase detail).\n",
+ "* Recorre cada fila válida:\n",
+ "\n",
+ " * Extrae las celdas ` | .`\n",
+ " * Guarda solo el texto visible de cada celda.\n",
+ " * Extrae nombre, distrito (como número) y partido.\n",
+ " * Crea una tupla con esos datos y la añade a la lista members.\n",
+ "\n",
+ "y al final de todo ya en teoría estaria la información limpia y estructurada."
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
@@ -748,6 +1056,14 @@
"len(members)"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Esta línea verifica cuántos senadores se extrajeron, mostrando la cantidad de elementos en `members.`\n",
+ "Según la página, debería ser 61, que es el número esperado de senadores."
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -843,6 +1159,18 @@
" members.append(senator)"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* Recorre las filas válidas como antes.\n",
+ "* Extrae nombre, distrito y partido igual que antes.\n",
+ "* Busca dentro de la fila el enlace `` cuyo texto contenga \"Bills\".\n",
+ "* Obtiene el atributo href de ese enlace, que es la URL relativa.\n",
+ "* Construye la URL completa concatenando con el dominio base.\n",
+ "* Finalmente agrega esta URL a la tupla de datos del senador."
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
@@ -877,6 +1205,13 @@
" return [___]\n"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "* Debido a que la URL no se encuentra funcionando actualmente, no se puede realizar el ejercicio."
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
@@ -962,33 +1297,17 @@
]
},
{
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
- "source": [
- "# YOUR CODE HERE\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "tags": []
- },
- "outputs": [],
+ "cell_type": "markdown",
+ "metadata": {},
"source": [
- "# Uncomment to test your code\n",
- "# bills_dict[52]"
+ "* Debido a que la URL no se encuentra funcionando actualmente, no se puede realizar el ejercicio."
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
- "display_name": "Python 3 (ipykernel)",
+ "display_name": "alejo1",
"language": "python",
"name": "python3"
},
@@ -1002,12 +1321,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.13"
- },
- "vscode": {
- "interpreter": {
- "hash": "b6f9fe9f4b7182690503d8ecc2bae97b0ee3ebf54e877167ae4d28c119a56988"
- }
+ "version": "3.13.5"
}
},
"nbformat": 4,
|