comcrawl — это пакет Python для удобного запроса и загрузки страниц с commoncrawl.org.
На создание comcrawl меня вдохновила прочтение этой статьи.
Примечание. Я сделал это для личных проектов и ради развлечения. Таким образом, этот пакет предназначен для использования в проектах малого и среднего размера, поскольку он не оптимизирован для обработки гигабайт или терабайтов данных. В таких случаях вы можете попробовать cdx-toolkit или cdx-index-client.
Проект Common Crawl — это «открытое хранилище данных веб-сканирования, к которому может получить доступ и проанализировать его любой» . Он содержит миллиарды веб-страниц и часто используется в проектах НЛП для сбора больших объемов текстовых данных.
Common Crawl предоставляет поисковый индекс, который можно использовать для поиска определенных URL-адресов в сканируемых данных. Каждый результат поиска содержит ссылку и смещение байтов на определенное место в корзинах AWS S3 для загрузки страницы.
comcrawl упрощает этот процесс поиска и загрузки с Common Crawl, предлагая простой интерфейс API, который вы можете использовать в своей программе Python.
comcrawl доступен на PyPI.
Установите его через pip, выполнив следующую команду со своего терминала:
pip install comcrawl
HTML-код каждой страницы будет доступен в виде строки в ключе «html» в каждом словаре результатов после вызова метода download
.
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
first_page_html = client . results [ 0 ][ "html" ]
Вы можете использовать многопоточность при поиске или загрузке, указав количество потоков, которые вы хотите использовать.
Не переусердствуйте, чтобы не создавать слишком большую нагрузку на серверы общего сканирования (см. Кодекс поведения).
from comcrawl import IndexClient
client = IndexClient ()
client . search ( "reddit.com/r/MachineLearning/*" , threads = 4 )
client . download ( threads = 4 )
Вы можете легко объединить этот пакет с библиотекой pandas, чтобы отфильтровать повторяющиеся результаты и сохранить их на диск:
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" )
Одного URL-ключа здесь может быть недостаточно, поэтому вы можете написать функцию для вычисления пользовательского идентификатора на основе свойств результатов для удаления дубликатов.
По умолчанию при создании экземпляра IndexClient
извлекает список доступных на данный момент индексов общего сканирования для поиска. Вы также можете ограничить поиск определенными общими индексами сканирования, указав их в виде списка.
from comcrawl import IndexClient
client = IndexClient ([ "2019-51" , "2019-47" ])
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
При отладке кода вы можете включить регистрацию всех сделанных HTTP-запросов.
from comcrawl import IndexClient
client = IndexClient ( verbose = True )
client . search ( "reddit.com/r/MachineLearning/*" )
client . download ()
При доступе к Common Crawl соблюдайте следующие рекомендации, опубликованные одним из сопровождающих Common Crawl:
https://groups.google.com/forum/#!msg/common-crawl/3QmQjFA_3y4/vTbhGqIBBQAJ