คู่มือการขูดเว็บด้วย Python โดยใช้ซุปที่สวยงาม
เผยแพร่แล้ว: 2020-06-23บทนำสู่การขูดเว็บด้วย Python:
เมื่อพูดถึงการขูดเว็บ ภาษาโปรแกรมบางภาษาเป็นที่ต้องการมากกว่าภาษาอื่น หนึ่งในสิ่งที่ได้รับความนิยมมากที่สุดคือ Python นอกจากจะเป็นหนึ่งในภาษาที่ง่ายที่สุดในการเรียนรู้เนื่องจากช่วงการเรียนรู้ที่อ่อนโยนแล้ว ภาษายังมีข้อได้เปรียบในการเป็นภาษาที่มีการสนับสนุนจากนักพัฒนาจำนวนมาก ซึ่งนำไปสู่แพ็คเกจของบุคคลที่สามมากมาย แพ็คเกจเหล่านี้ใช้ได้กับหลายฟังก์ชัน ซึ่งอาจใช้งานกับ Core Python ได้ยาก ตัวอย่างทั่วไป ได้แก่ สำหรับการประมวลผลภาพหรือการมองเห็นด้วยคอมพิวเตอร์ เราใช้ OpenCV สำหรับการเรียนรู้ของเครื่อง เราใช้ TensorFlow และสำหรับการพล็อตกราฟ เราใช้ MatplotLib เมื่อพูดถึงการขูดเว็บ หนึ่งในไลบรารี่ที่ใช้บ่อยที่สุดคือ BeautifulSoup ไลบรารีนี้ไม่ได้คัดลอกข้อมูลจากอินเทอร์เน็ตโดยเฉพาะ แต่ในกรณีที่คุณสามารถรับไฟล์ HTML ของหน้าเว็บได้ ไลบรารีนี้จะช่วยดึงข้อมูลเฉพาะจุดจากไฟล์นั้นได้ โดยทั่วไป ไลบรารีจะใช้เพื่อแยกจุดข้อมูลจากเอกสาร XML และ HTML
BeautifulSoup ทำงานอย่างไร?
ก่อนที่คุณจะเขียนโค้ดใน Python คุณต้องเข้าใจว่า BeautifulSoup ทำงานอย่างไร เมื่อคุณแยกเนื้อหา HTML ของหน้าเว็บและเก็บไว้ในตัวแปรแล้ว พูด html_obj จากนั้นคุณสามารถแปลงเป็นวัตถุ BeautifulSoup ด้วยโค้ดเพียงบรรทัดเดียว
| soup_obj = BeautifulSoup (html_obj, 'html.parser') |
โดยที่ html_obj คือข้อมูล HTML, soup_obj คืออ็อบเจกต์ bs ที่ได้รับ และ “html.parser” คือ parser ที่ใช้ในการแปลง เมื่อคุณมีอ็อบเจ็กต์ bs ที่เรียกว่า soup_obj การข้ามผ่านนั้นง่ายมาก และเนื่องจากการข้ามผ่านนั้นตรงไปตรงมาเพียงพอ การดึงข้อมูลก็กลายเป็นเรื่องง่าย ลองมาดูตัวอย่างกัน สมมติว่าคุณจำเป็นต้องดึงข้อมูลจุดข้อมูลที่เรียกว่าชื่อผลิตภัณฑ์ ซึ่งมีอยู่ในทุกหน้าของเว็บไซต์อีคอมเมิร์ซ ตอนนี้คุณดาวน์โหลดหน้าผลิตภัณฑ์ HTML หน้าเดียวจากเว็บไซต์นั้น และพบว่าแต่ละหน้ามีชื่อผลิตภัณฑ์ที่กล่าวถึงในองค์ประกอบของช่วงประเภทที่มีรหัสเป็นชื่อผลิตภัณฑ์ ดังนั้นคุณจะดึงข้อมูลนี้จากหน้าผลิตภัณฑ์ 1,000 ได้อย่างไร คุณจะได้ข้อมูล HTML สำหรับแต่ละหน้า และดึงข้อมูลจุดข้อมูลในลักษณะนี้-
| สำหรับช่วงใน soup.findAll('span', attrs={'id': 'productTitle'}): name_of_product = spans.text.strip() |
แม้ว่านี่จะเป็นวิธีการรับข้อมูลที่เป็นข้อความระหว่างองค์ประกอบแท็กบางอย่าง คุณสามารถดึงข้อมูลจากแอตทริบิวต์ของแท็กได้เช่นกัน

วิธีการขูดข้อมูลจากหน้าเว็บโดยใช้ BeautifulSoup?
ตอนนี้เรามีความเข้าใจพื้นฐานเกี่ยวกับวิธีการสำรวจวัตถุ bs แล้ว ให้เราไปเขียนโค้ดและดูว่ามันทำงานอย่างไร ด้วยการใช้ข้อมูลโค้ดด้านล่าง คุณสามารถขูดข้อมูลจาก Zillow ซึ่งเป็นตลาดอสังหาริมทรัพย์ชั้นนำที่ตั้งอยู่ในสหรัฐอเมริกาได้อย่างง่ายดาย คุณสามารถเรียกใช้โค้ดนี้และป้อน URL ของรายการเพื่อรับข้อมูลเอาต์พุตในรูปแบบ JSON มาทำความเข้าใจโค้ดกันทีละบรรทัด อย่างแรกเลย ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Python 3.7 หรือสูงกว่าในเครื่องของคุณ ใช้ pip เพื่อติดตั้ง BeautifulSoup แพ็คเกจอื่นๆ ทั้งหมดมาพร้อมกับ Python ล่วงหน้า ดังนั้นคุณไม่จำเป็นต้องติดตั้งแพ็คเกจใดๆ เมื่อเสร็จแล้ว ให้ติดตั้งโปรแกรมแก้ไขโค้ด เช่น Atom หรือ VS Code เท่านี้คุณก็พร้อมใช้งานแล้ว การทำความเข้าใจโค้ดเป็นสิ่งสำคัญ ดังนั้นเราจะเริ่มจากบรรทัดแรก คุณต้องมีคำสั่งการนำเข้าสี่รายการสำหรับการทำงานเฉพาะ ถัดไป คุณมีสามบรรทัดที่ขึ้นต้นด้วย “ctx” สิ่งเหล่านี้มีไว้สำหรับละเว้นข้อผิดพลาดของใบรับรอง SSL ที่คุณอาจพบเมื่อเข้าถึงเว็บไซต์ผ่านรหัสของคุณโดยเฉพาะ ต่อไป เราใช้ URL ของเว็บไซต์เป็นอินพุตจากผู้ใช้ ที่นี่คุณสามารถฮาร์ดโค้ด URL ได้เช่นกัน หรือแม้กระทั่งมีอาร์เรย์ของ URL หลายรายการ
กระบวนการขูดเว็บ:
ต่อไป เราเข้าถึงหน้าเว็บโดยใช้ฟังก์ชันคำขอของ urllib ตรวจสอบให้แน่ใจว่าได้เพิ่ม User-Agent ในส่วนหัวเพื่อทำให้เว็บไซต์เชื่อว่าคุณกำลังใช้เบราว์เซอร์ เหตุผลเบื้องหลังการทำเช่นนี้คือเว็บไซต์มีขึ้นเพื่อให้เข้าถึงได้โดยเบราว์เซอร์และไม่ใช่โค้ด ดังนั้นจึงอาจบล็อก IP ของคุณหากพวกเขาจับคุณได้ เมื่อดำเนินการเสร็จแล้ว เราได้ดำเนินการตามขั้นตอนพื้นฐานทั้งหมดเรียบร้อยแล้ว และต่อไป เราจะแปลงวัตถุ HTML เป็นวัตถุ bs แล้วปรับแต่งให้อยู่ในรูปแบบ utf-8 เพื่อจัดการกับอักขระพิเศษและสัญลักษณ์ในหน้าเว็บ เมื่อเสร็จแล้ว เราจะแยกชื่อ รายละเอียดโดยย่อ และคุณสมบัติอื่นๆ โดยแยกวิเคราะห์วัตถุ bs อย่างที่คุณเห็น ในแท็กสคริปต์ที่มีประเภทแอตทริบิวต์ = application/ld+json มีจุดข้อมูลหลายจุดทั้งหมดจัดเก็บในรูปแบบ JSON นอกจากนี้ คุณจะเห็นว่าเราใช้การตรวจสอบ i==0 และ i==1 เนื่องจากมีแท็กสคริปต์สองแท็ก (ที่มีแอตทริบิวต์เดียวกัน) เช่นนี้ในหน้า แท็กแรกให้จุดข้อมูลบางส่วน ในขณะที่แท็กที่สองให้ข้อมูลที่เหลือ เมื่อเราแยกจุดข้อมูลทั้งหมดแล้ว คุณสามารถเก็บไว้ในไฟล์ JSON และบันทึกตามที่เรามี คุณยังสามารถบันทึก อัปโหลดไปยังไซต์ หรือแม้แต่กด API ด้วยข้อมูลได้หากต้องการ

| นำเข้า json นำเข้า ssl จาก urllib.request คำขอนำเข้า urlopen จาก bs4 นำเข้า BeautifulSoup # ละเว้นข้อผิดพลาดของใบรับรอง SSL # ใช้ URL รายการ Zillow เป็นอินพุต #ทำให้เว็บไซต์เชื่อว่าคุณกำลังใช้เบราว์เซอร์ # หน้า HTML -> ซุปวัตถุ BeautifulSoup = BeautifulSoup (หน้าเว็บ 'html.parser') # แยกจุดข้อมูลต่าง ๆ ของรายการทรัพย์สิน สำหรับ meta ใน soup.findAll('meta', attrs={'name': 'description'}): สำหรับ div ใน soup.findAll('div', attrs={'class': 'character-count-truncated'}): สำหรับ (i, สคริปต์) ในการแจกแจง (soup.findAll('script', ด้วย open('house_listing_data.json', 'w') เป็นไฟล์ outfile: ด้วย open('house_listing_data.html', 'wb') เป็นไฟล์: print('———-การดึงข้อมูลเสร็จสมบูรณ์ ตรวจสอบไฟล์ json.———-') |
เอาต์พุต JSON ควรมีลักษณะดังนี้ -
| { “details_long”: { “no_of_rooms”: 3, “floor_size_in_sqrft”: “1,392” }, "ที่อยู่": { “ถนน”: “22516 Joan Dr”, “ท้องถิ่น”: “แคลิฟอร์เนีย”, “ภูมิภาค”: “MD”, “รหัสไปรษณีย์”: “20619” }, “หัวข้อ”: “22516 Joan Dr, California, MD 20619 | MLS #MDSM167670”, “details_short”: “22516 Joan Dr , California, MD 20619-3175 เป็นบ้านเดี่ยวพร้อมขายในราคา 150,000 ดอลลาร์ บ้าน 1,392 ตร.ฟุต มีขนาด 3 ห้องนอน 2.0 ห้องน้ำ ค้นหาภาพถ่ายบ้าน 22516 Joan Dr ที่ Zillow จำนวน 40 รูป ดูรายละเอียดทรัพย์สิน ประวัติการขาย และข้อมูล Zestimate เพิ่มเติมบน Zillow MLS # MDSM167670”, “price_in_dollars”: 150000, “inage”: “https://photos.zillowstatic.com/p_h/ISn2oi3glpvdv10000000000.jpg” } |
บทสรุป:
การใช้ BeautifulSoup สำหรับความต้องการในการขูดเว็บของคุณอาจเป็นเรื่องง่าย ตราบใดที่คุณสามารถวิเคราะห์หน้า HTML ด้วยตนเองในตอนแรก และตัดสินใจเกี่ยวกับแท็กที่จำเป็นต้องกำหนดเป้าหมาย สามารถทำงานบนหน้าที่ไม่มีเนื้อหาแบบไดนามิกและไม่ได้อยู่หลังหน้าเข้าสู่ระบบ สำหรับหน้าเว็บที่ซับซ้อนมากขึ้น คุณจะต้องมีเครื่องมือที่ซับซ้อนมากขึ้น ทีมงานของเราที่ PromptCloud ช่วยเหลือบริษัทที่ต้องการใช้ประโยชน์จากข้อมูลและตัดสินใจโดยใช้ข้อมูลสำรอง เราไม่เพียงแต่ช่วยตั้งค่าเอ็นจิ้นการขูดเว็บแบบอัตโนมัติเต็มรูปแบบที่ทำงานเป็นระยะๆ บนคลาวด์ แต่ยังช่วยให้บริษัทต่างๆ วิเคราะห์ข้อมูลเพื่อดึงแนวโน้มและข้อมูลที่เป็นประโยชน์อื่นๆ
