comcrawl 은 commoncrawl.org에서 페이지를 쉽게 쿼리하고 다운로드할 수 있는 Python 패키지입니다.
나는 이 글을 읽으면서 컴크롤링을 해야겠다는 영감을 받았습니다.
참고: 저는 이것을 개인 프로젝트와 재미를 위해 만들었습니다. 따라서 이 패키지는 기가바이트 또는 테라바이트의 데이터를 처리하는 데 최적화되어 있지 않기 때문에 중소 규모 프로젝트에 사용하도록 고안되었습니다. 그러한 경우에는 cdx-toolkit 또는 cdx-index-client를 확인하는 것이 좋습니다.
Common Crawl 프로젝트는 "누구나 접근하고 분석할 수 있는 웹 크롤링 데이터의 공개 저장소" 입니다. 여기에는 수십억 개의 웹 페이지가 포함되어 있으며 NLP 프로젝트에서 대량의 텍스트 데이터를 수집하는 데 자주 사용됩니다.
Common Crawl은 크롤링된 데이터에서 특정 URL을 검색하는 데 사용할 수 있는 검색 색인을 제공합니다. 각 검색 결과에는 페이지를 다운로드하기 위한 AWS S3 버킷의 특정 위치에 대한 링크와 바이트 오프셋이 포함되어 있습니다.
comcrawl은 Python 프로그램에서 사용할 수 있는 간단한 API 인터페이스를 제공하여 Common Crawl에서 검색하고 다운로드하는 프로세스를 단순화합니다.
comcrawl은 PyPI에서 사용할 수 있습니다.
터미널에서 다음 명령을 실행하여 pip를 통해 설치하십시오.
pip install comcrawl
각 페이지의 HTML은 download
메소드를 호출한 후 각 결과 사전의 'html' 키에 문자열로 제공됩니다.
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" )
여기에서는 urlkey만으로는 충분하지 않을 수 있으므로 중복 제거를 위해 결과 속성에서 사용자 정의 ID를 계산하는 함수를 작성하는 것이 좋습니다.
기본적으로 인스턴스화되면 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 ()
일반 크롤링에 액세스할 때 일반 크롤링 관리자 중 한 명이 게시한 다음 지침을 주의하십시오.
https://groups.google.com/forum/#!msg/common-crawl/3QmQjFA_3y4/vTbhGqIBBQAJ