ความแตกต่างระหว่าง BeautifulSoup และ Scrapy Crawler


139

ฉันต้องการสร้างเว็บไซต์ที่แสดงการเปรียบเทียบระหว่างราคาสินค้าของ amazon กับ e-bay ข้อใดจะทำงานได้ดีกว่าและเพราะเหตุใด ผมค่อนข้างคุ้นเคยกับBeautifulSoupแต่ไม่มากกับScrapy ตีนตะขาบ


6
ทำไมคุณถึงใช้โปรแกรมรวบรวมข้อมูลเมื่อทั้งสองไซต์มี API ที่ยอดเยี่ยม aws.amazon.com/python developer.ebay.com/common/api
Inbar Rose

5
ฉันมาจากอินเดียและฉันคิดว่าAmazon-Apiไม่รองรับโฮสต์ในอินเดีย ไม่มีapi (locale)สำหรับอินเดีย HOSTS = {'ca': 'ecs.amazonaws.ca', 'cn': 'webservices.amazon.cn', 'de': 'ecs.amazonaws.de', 'es': 'webservices.amazon.es' , 'fr': 'ecs.amazonaws.fr', 'it': 'webservices.amazon.it', 'jp': 'ecs.amazonaws.jp', 'uk': 'ecs.amazonaws.co.uk' , 'us': 'ecs.amazonaws.com',}
Nishant Bhakta

11
แล้วถ้าฉันต้องการรวบรวมข้อมูลไซต์อื่นที่ไม่มี API ล่ะ?
Nishant Bhakta

@InbarRose การใช้ API ผลิตภัณฑ์ของ Amazon จำเป็นต้องมีบัญชี Amazon Associate
Zachary Ryan Smith

คำตอบ:


237

Scrapyเป็นเฟรมเวิร์กWeb-spider หรือweb scraperคุณให้ URL รูทของ Scrapy เพื่อเริ่มการรวบรวมข้อมูลจากนั้นคุณสามารถระบุข้อ จำกัด เกี่ยวกับจำนวน URL (จำนวน) ที่คุณต้องการรวบรวมข้อมูลและดึงข้อมูล ฯลฯ มันเป็นกรอบที่สมบูรณ์แบบสำหรับเว็บขูดหรือการรวบรวมข้อมูล

ในขณะที่

BeautifulSoupเป็นไลบรารีแยกวิเคราะห์ซึ่งทำงานได้ดีในการดึงเนื้อหาจาก URL และช่วยให้คุณสามารถแยกวิเคราะห์บางส่วนได้โดยไม่ต้องยุ่งยาก ดึงเฉพาะเนื้อหาของ URL ที่คุณให้แล้วหยุด มันจะไม่รวบรวมข้อมูลเว้นแต่คุณจะวางไว้ในลูปที่ไม่มีที่สิ้นสุดด้วยตนเองด้วยเกณฑ์บางอย่าง

พูดง่ายๆด้วย Beautiful Soup คุณสามารถสร้างสิ่งที่คล้ายกับ Scrapy ได้ สวยซุปเป็นห้องสมุดในขณะ Scrapy เป็นกรอบการทำงานที่สมบูรณ์

ที่มา


1
ซึ่งเร็วกว่าฉันหมายถึงฉันใช้ BeautifulSoup และใช้เวลาประมาณ 10 วินาทีในการคัดลอกข้อมูล scrapy เร็วกว่า beautifulsoup หรือไม่?
shuboy2014

หากคุณใช้ beautifulsoup กับรหัสบล็อกการทำ scrapy จะเร็วขึ้นตราบเท่าที่มีการร้องขอที่เป็นอิสระ แต่ฉันเดาว่าคุณสามารถใช้ beautifulsoup กับ asyncio เพื่อให้ได้ประสิทธิภาพที่ดีขึ้น
dyeray

ฉันจะบอกว่า Scrapy พร้อมกับ BeautifulSoup จะเร็วมากและคุณจะได้รับสิ่งที่ดีที่สุดจากทั้งสองอย่าง
Rahul

18

ฉันคิดว่าดีทั้งคู่ ... ตอนนี้ฉันกำลังทำโปรเจ็กต์ที่ใช้ทั้งสองอย่าง ก่อนอื่นฉันคัดลอกหน้าทั้งหมดโดยใช้ scrapy และบันทึกไว้ในคอลเลกชัน mongodb โดยใช้ไปป์ไลน์ของพวกเขารวมถึงดาวน์โหลดภาพที่มีอยู่บนหน้า หลังจากนั้นฉันใช้ BeautifulSoup4 เพื่อทำการโพรเซสซิงโดยที่ฉันต้องเปลี่ยนค่าแอตทริบิวต์และรับแท็กพิเศษ

หากคุณไม่ทราบว่าต้องการผลิตภัณฑ์ของหน้าใดเครื่องมือที่ดีจะเป็นเครื่องมือที่ดีเนื่องจากคุณสามารถใช้โปรแกรมรวบรวมข้อมูลเพื่อเรียกใช้เว็บไซต์ amazon / ebay ทั้งหมดเพื่อค้นหาผลิตภัณฑ์โดยไม่ต้องมีการวนซ้ำอย่างชัดเจน

ดูเอกสารประกอบการทำ scrapy ใช้งานง่ายมาก


ฉันสามารถใช้Scrapyบนเว็บเซิร์ฟเวอร์ได้หรือไม่เนื่องจากมีการอ้างอิงหลายอย่างเช่น (Twisted, pywin32, pyOpenSSL ete .. ) (ขออภัยสำหรับคำถามงี่เง่านี้ฉันยังใหม่สำหรับ python)
Nishant Bhakta

บนเว็บเซิร์ฟเวอร์? ฉันไม่เคยลองแบบนั้น ... ฉันใช้มันบนเชลล์เรียกใช้ "scrapy crawl <name of crawler>" เพื่อเรียกใช้สไปเดอร์ ... บางทีคุณอาจใช้สิ่งนี้บนเซิร์ฟเวอร์ แต่คุณต้องเรียกสิ่งนี้โดยใช้ python โมดูลกระบวนการย่อย ( docs.python.org/2/library/subprocess.html ) อย่างที่ฉันบอกว่าไม่เคยลอง แต่บางทีมันอาจใช้งานได้ ... เพียงแค่จดบันทึกใช้ข้อความบันทึกจาก scrapy เพื่อให้คุณรู้ว่า erros อาจเกิดขึ้นที่ใดในโปรแกรมรวบรวมข้อมูลของคุณ (จากบันทึกการนำเข้า scrapy)
rdenadai

4

ทั้งสองใช้เพื่อแยกวิเคราะห์ข้อมูล

Scrapy :

  • Scrapy คือการรวบรวมข้อมูลเว็บระดับสูงและเฟรมเวิร์กการคัดลอกเว็บที่รวดเร็วซึ่งใช้ในการรวบรวมข้อมูลเว็บไซต์และดึงข้อมูลที่มีโครงสร้างออกจากหน้าเว็บ
  • แต่มีข้อ จำกัด บางประการเมื่อข้อมูลมาจากสคริปต์ java หรือการโหลดแบบไดนามิกเราสามารถทำได้โดยใช้แพ็คเกจเช่น splash, selenium เป็นต้น

สวยซุป :

  • Beautiful Soup เป็นไลบรารี Python สำหรับดึงข้อมูลออกจากไฟล์ HTML และ XML

  • เราสามารถใช้แพ็คเกจนี้เพื่อรับข้อมูลจากสคริปต์ java หรือโหลดเพจแบบไดนามิก

Scrapy กับ BeautifulSoup เป็นหนึ่งในคำสั่งผสมที่ดีที่สุดที่เราสามารถใช้เพื่อขูดเนื้อหาแบบคงที่และไดนามิกได้


2

วิธีที่ฉันทำคือใช้ eBay / Amazon API แทน scrapy แล้วแยกวิเคราะห์ผลลัพธ์โดยใช้ BeautifulSoup

API ช่วยให้คุณสามารถรับข้อมูลแบบเดียวกับที่คุณจะได้รับจากโปรแกรมรวบรวมข้อมูล scrapy โดยไม่ต้องกังวลเกี่ยวกับการซ่อนตัวตนของคุณยุ่งเกี่ยวกับพร็อกซี ฯลฯ


8
คำถามนี้ถามอย่างชัดเจนสำหรับวิธีแก้ปัญหาที่ไม่มี API
Rohanil

นอกจากนี้เพียงแค่อยากรู้อยากเห็น หากคุณใช้ API จริง (ซึ่งส่งคืน JSON) ทำไมคุณถึงต้องใช้ Beautiful Soup เพื่อแยกวิเคราะห์?
Jay Stevens

2

Scrapy เป็นกรอบการขูดเว็บที่มาพร้อมกับสินค้ามากมายที่ทำให้การขูดง่ายขึ้นเพื่อให้เราสามารถมุ่งเน้นไปที่ตรรกะในการรวบรวมข้อมูลเท่านั้น สิ่งที่ฉันโปรดปรานบางอย่างที่ฉันดูแลเราอยู่ด้านล่าง

  • การส่งออกฟีด : โดยทั่วไปจะช่วยให้เราสามารถบันทึกข้อมูลในรูปแบบต่างๆเช่น CSV, JSON, jsonlines และ XML
  • การขูดแบบอะซิงโครนัส: Scrapy ใช้กรอบการทำงานที่บิดเบี้ยวซึ่งให้อำนาจแก่เราในการเยี่ยมชม URL หลายรายการพร้อมกันโดยที่แต่ละคำขอได้รับการประมวลผลแบบไม่ปิดกั้น (โดยทั่วไปเราไม่ต้องรอให้คำขอเสร็จสิ้นก่อนที่จะส่งคำขออื่น)
  • Selectors : นี่คือที่ที่เราสามารถเปรียบเทียบ scrapy กับซุปที่สวยงาม ตัวเลือกคือสิ่งที่ช่วยให้เราสามารถเลือกข้อมูลเฉพาะจากหน้าเว็บเช่นหัวเรื่อง div บางอย่างที่มีชื่อคลาสเป็นต้น) Scrapy ใช้ lxml ในการแยกวิเคราะห์ซึ่งเร็วกว่าซุปที่สวยงามมาก
  • การตั้งค่าพร็อกซีตัวแทนผู้ใช้ส่วนหัว ฯลฯ : scrapy ช่วยให้เราตั้งค่าและหมุนพร็อกซีและส่วนหัวอื่น ๆ แบบไดนามิก

  • ไปป์ไลน์ไอเทม : ไปป์ไลน์ช่วยให้เราสามารถประมวลผลข้อมูลหลังจากการแยก ตัวอย่างเช่นเราสามารถกำหนดค่าไปป์ไลน์เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ mysql ของคุณ

  • คุกกี้: scrapy จะจัดการคุกกี้ให้เราโดยอัตโนมัติ

เป็นต้น

TLDR: scrapy เป็นเฟรมเวิร์กที่ให้ทุกสิ่งที่จำเป็นในการสร้างการรวบรวมข้อมูลขนาดใหญ่ มีคุณสมบัติต่างๆที่ซ่อนความซับซ้อนของการรวบรวมข้อมูลเว็บ เราสามารถเริ่มเขียนโปรแกรมรวบรวมข้อมูลเว็บได้โดยไม่ต้องกังวลกับภาระการติดตั้ง

ซุปสวย สวยซุปเป็นแพคเกจหลามสำหรับการแยก HTML และเอกสาร ด้วย Beautiful soup คุณสามารถแยกวิเคราะห์หน้าเว็บที่ดาวน์โหลดมาแล้ว BS4 เป็นที่นิยมและเก่ามาก ซึ่งแตกต่างจาก scrapy,คุณไม่สามารถใช้น้ำซุปที่สวยงามเท่านั้นที่จะทำให้โปรแกรมรวบรวมข้อมูล คุณจะต้องมีไลบรารีอื่น ๆ เช่นคำขอ urllib และอื่น ๆ เพื่อสร้างโปรแกรมรวบรวมข้อมูลด้วย bs4 อีกครั้งหมายความว่าคุณจะต้องจัดการรายการ URL ที่กำลังรวบรวมข้อมูลเพื่อรวบรวมข้อมูลจัดการคุกกี้จัดการพร็อกซีจัดการข้อผิดพลาดสร้างฟังก์ชันของคุณเองเพื่อพุชข้อมูลไปยัง CSV, JSON, XML เป็นต้นหากคุณต้องการเร่งความเร็ว กว่าที่คุณจะต้องใช้ไลบรารีอื่น ๆ เช่นการประมวลผลหลายขั้นตอน

เพื่อสรุปผล

  • Scrapy เป็นเฟรมเวิร์กที่สมบูรณ์ที่คุณสามารถใช้เพื่อเริ่มเขียนโปรแกรมรวบรวมข้อมูลได้โดยไม่ต้องยุ่งยาก

  • ซุปตาร์สวยคือไลบรารีที่คุณสามารถใช้เพื่อแยกวิเคราะห์หน้าเว็บ ไม่สามารถใช้เพียงอย่างเดียวในการขูดเว็บ

แน่นอนคุณควรใช้ scrapy สำหรับเว็บไซต์เปรียบเทียบราคาผลิตภัณฑ์ amazon และ e-bay ของคุณ คุณสามารถสร้างฐานข้อมูลของ URL และเรียกใช้โปรแกรมรวบรวมข้อมูลทุกวัน (งาน cron, ขึ้นฉ่ายสำหรับการจัดตารางเวลารวบรวมข้อมูล) และอัปเดตราคาในฐานข้อมูลของคุณวิธีนี้เว็บไซต์ของคุณจะดึงจากฐานข้อมูลเสมอและโปรแกรมรวบรวมข้อมูลและฐานข้อมูลจะทำหน้าที่เป็นส่วนประกอบแต่ละส่วน


1

BeautifulSoupเป็นไลบรารีที่ให้คุณดึงข้อมูลจากหน้าเว็บ

ในทางกลับกันScrapyเป็นกรอบงานซึ่งทำสิ่งต่างๆข้างต้นและสิ่งอื่น ๆ อีกมากมายที่คุณอาจต้องการในโครงการคัดลอกของคุณเช่นท่อสำหรับบันทึกข้อมูล

คุณสามารถตรวจสอบบล็อกนี้เพื่อเริ่มต้นใช้งาน Scrapy https://www.inkoop.io/blog/web-scraping-using-python-and-scrapy/


0

การใช้scrapyคุณสามารถบันทึกโค้ดได้มากมายและเริ่มต้นด้วยการเขียนโปรแกรมแบบมีโครงสร้างหากคุณไม่ชอบวิธีการเขียนไว้ล่วงหน้าของ scapy คุณสามารถใช้BeautifulSoupแทนวิธีการ scrapy ได้ โครงการขนาดใหญ่ใช้ประโยชน์ทั้งสองอย่าง


0

ความแตกต่างมีมากมายและการเลือกใช้เครื่องมือ / เทคโนโลยีใด ๆ ขึ้นอยู่กับความต้องการของแต่ละบุคคล

ความแตกต่างที่สำคัญบางประการ ได้แก่ :

  1. BeautifulSoup นั้นค่อนข้างง่ายต่อการเรียนรู้มากกว่า Scrapy
  2. ส่วนขยายการสนับสนุนชุมชนมีขนาดใหญ่กว่าสำหรับ Scrapy มากกว่า BeautifulSoup
  3. Scrapy ควรได้รับการพิจารณาเป็นแมงมุมขณะ BeautifulSoup เป็นตัวแยกวิเคราะห์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.