comcrawl é um pacote python para consultar e baixar facilmente páginas de commoncrawl.org.
Fiquei inspirado a fazer comcrawl lendo este artigo.
Nota: fiz isso para projetos pessoais e para diversão. Assim, este pacote é destinado ao uso em projetos de pequeno e médio porte, pois não está otimizado para lidar com gigabytes ou terabytes de dados. Você pode querer verificar cdx-toolkit ou cdx-index-client nesses casos.
O projeto Common Crawl é um “repositório aberto de dados de rastreamento da web que pode ser acessado e analisado por qualquer pessoa” . Ele contém bilhões de páginas da web e é frequentemente usado em projetos de PNL para coletar grandes quantidades de dados de texto.
O Common Crawl fornece um índice de pesquisa, que você pode usar para pesquisar determinados URLs em seus dados rastreados. Cada resultado da pesquisa contém um link e um deslocamento de byte para um local específico em seus buckets AWS S3 para baixar a página.
comcrawl simplifica esse processo de pesquisa e download do Common Crawl, oferecendo uma interface API simples que você pode usar em seu programa python.
comcrawl está disponível no PyPI.
Instale-o via pip executando o seguinte comando em seu terminal:
pip install comcrawl
O HTML de cada página estará disponível como uma string na chave 'html' em cada dicionário de resultados após chamar o método download
.
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
first_page_html = client . results [ 0 ][ "html" ]
Você pode aproveitar o multithreading durante a pesquisa ou download, especificando o número de threads que deseja usar.
Lembre-se de não exagerar, para não colocar muito estresse nos servidores de rastreamento comum (dê uma olhada no Código de Conduta).
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" , threads = 4 )
client . download ( threads = 4 )
Você pode facilmente combinar este pacote com a biblioteca pandas, para filtrar resultados duplicados e mantê-los no 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" )
A urlkey por si só pode não ser suficiente aqui, então você pode querer escrever uma função para calcular um ID personalizado a partir das propriedades dos resultados para a remoção de duplicatas.
Por padrão, quando instanciado, o IndexClient
busca uma lista de índices de rastreamento comum atualmente disponíveis para pesquisa. Você também pode restringir a pesquisa a determinados índices de rastreamento comuns, especificando-os como uma lista.
from comcrawl import IndexClient
client = IndexClient ([ "2019-51" , "2019-47" ])
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
Ao depurar seu código, você pode ativar o registro de todas as solicitações HTTP feitas.
from comcrawl import IndexClient
client = IndexClient ( verbose = True )
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
Ao acessar o Common Crawl, tome cuidado com estas diretrizes publicadas por um dos mantenedores do Common Crawl:
https://groups.google.com/forum/#!msg/common-crawl/3QmQjFA_3y4/vTbhGqIBBQAJ