comcrawl es un paquete de Python para consultar y descargar páginas fácilmente desde commoncrawl.org.
Me inspiré para hacer comcrawl leyendo este artículo.
Nota: Hice esto para proyectos personales y por diversión. Por lo tanto, este paquete está pensado para su uso en proyectos pequeños y medianos, porque no está optimizado para manejar gigabytes o terrabytes de datos. Es posible que desee consultar cdx-toolkit o cdx-index-client en tales casos.
El proyecto Common Crawl es un "depósito abierto de datos de rastreo web al que cualquier persona puede acceder y analizar" . Contiene miles de millones de páginas web y se utiliza a menudo en proyectos de PNL para recopilar grandes cantidades de datos de texto.
Common Crawl proporciona un índice de búsqueda que puede utilizar para buscar determinadas URL en sus datos rastreados. Cada resultado de búsqueda contiene un enlace y un desplazamiento de bytes a una ubicación específica en sus depósitos de AWS S3 para descargar la página.
comcrawl simplifica este proceso de búsqueda y descarga desde Common Crawl al ofrecer una interfaz API simple que puede usar en su programa Python.
comcrawl está disponible en PyPI.
Instálelo mediante pip ejecutando el siguiente comando desde su terminal:
pip install comcrawl
El HTML de cada página estará disponible como una cadena en la clave 'html' de cada diccionario de resultados después de llamar al método download
.
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
first_page_html = client . results [ 0 ][ "html" ]
Puede aprovechar el subproceso múltiple mientras realiza búsquedas o descargas especificando la cantidad de subprocesos que desea utilizar.
Tenga en cuenta que no debe exagerar con esto, para no estresar demasiado los servidores de rastreo común (consulte el Código de conducta).
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" , threads = 4 )
client . download ( threads = 4 )
Puede combinar fácilmente este paquete con la biblioteca pandas para filtrar resultados duplicados y conservarlos en el disco:
from comcrawl import IndexClient
import pandas as pd
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" )
client . results = ( pd . DataFrame ( client . results )
. sort_values ( by = "timestamp" )
. drop_duplicates ( "urlkey" , keep = "last" )
. to_dict ( "records" ))
client . download ()
pd . DataFrame ( client . results ). to_csv ( "results.csv" )
Es posible que la clave de URL por sí sola no sea suficiente en este caso, por lo que es posible que desee escribir una función para calcular una identificación personalizada a partir de las propiedades de los resultados para eliminar duplicados.
De forma predeterminada, cuando se crea una instancia, IndexClient
obtiene una lista de índices de rastreo común actualmente disponibles para buscar. También puede restringir la búsqueda a ciertos índices de rastreo comunes, especificándolos como una lista.
from comcrawl import IndexClient
client = IndexClient ([ "2019-51" , "2019-47" ])
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
Al depurar su código, puede habilitar el registro de todas las solicitudes HTTP que se realicen.
from comcrawl import IndexClient
client = IndexClient ( verbose = True )
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
Al acceder a Common Crawl, tenga en cuenta estas pautas publicadas por uno de los mantenedores de Common Crawl:
https://groups.google.com/forum/#!msg/common-crawl/3QmQjFA_3y4/vTbhGqIBBQAJ