comcrawl เป็นแพ็คเกจ Python สำหรับการสืบค้นและดาวน์โหลดหน้าจาก commoncrawl.org ได้อย่างง่ายดาย
ฉันได้รับแรงบันดาลใจให้ทำการ รวบรวมข้อมูล โดยการอ่านบทความนี้
หมายเหตุ: ฉันทำสิ่งนี้เพื่อโครงการส่วนตัวและเพื่อความสนุกสนาน ดังนั้นแพ็คเกจนี้จึงมีไว้สำหรับใช้ในโครงการขนาดเล็กถึงขนาดกลาง เนื่องจากไม่ได้รับการปรับให้เหมาะสมสำหรับการจัดการข้อมูลกิกะไบต์หรือเทราไบต์ คุณอาจต้องการตรวจสอบ cdx-toolkit หรือ cdx-index-client ในกรณีเช่นนี้
โครงการ Common Crawl คือ "ที่เก็บข้อมูลแบบเปิดของการรวบรวมข้อมูลเว็บที่ทุกคนสามารถเข้าถึงและวิเคราะห์ได้" ประกอบด้วยหน้าเว็บหลายพันล้านหน้า และมักใช้สำหรับโครงการ NLP เพื่อรวบรวมข้อมูลข้อความจำนวนมาก
การรวบรวมข้อมูลทั่วไปมีดัชนีการค้นหา ซึ่งคุณสามารถใช้เพื่อค้นหา 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" )
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