ขูดเว็บไซต์ด้วยบทช่วยสอน Soup Python ที่สวยงาม

Beautiful Soup เป็นไลบรารี Python แบบโอเพ่นซอร์ส มันใช้ตัวแยกวิเคราะห์การนำทางเพื่อขูดเนื้อหาของไฟล์ XML และ HTML คุณต้องการข้อมูลเพื่อการวิเคราะห์หลายประการ อย่างไรก็ตาม หากคุณเพิ่งเริ่มใช้ Python และการขูดเว็บ ไลบรารี Beautiful Soup ของ Python ก็คุ้มค่าที่จะลองใช้โปรเจ็กต์การขูดเว็บ

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

วิธีการติดตั้งซุปที่สวยงามและเริ่มต้นกับมัน

ก่อนที่เราจะดำเนินการต่อ ในบทความบทช่วยสอน Beautiful Soup เราจะใช้ Python 3 และbeautifulsoup4ซึ่งเป็นเวอร์ชันล่าสุดของ Beautiful Soup ตรวจสอบให้แน่ใจว่าคุณได้สร้างสภาพแวดล้อมเสมือนของ Pythonเพื่อแยกโปรเจ็กต์และแพ็คเกจออกจากโปรเจ็กต์บนเครื่องของคุณ

ในการเริ่มต้น คุณต้องติดตั้งไลบรารี Beautiful Soup ในสภาพแวดล้อมเสมือนของคุณ Beautiful Soup มีให้ในรูปแบบแพ็คเกจ PyPi สำหรับระบบปฏิบัติการทั้งหมด ดังนั้นคุณจึงสามารถติดตั้งได้ด้วยคำสั่งpip install beautifulsoup4ผ่านเทอร์มินัล

แต่ถ้าคุณอยู่ใน Debian หรือ Linux คำสั่งดังกล่าวยังคงทำงาน แต่คุณสามารถติดตั้งได้กับผู้จัดการแพคเกจโดยใช้apt-get install python3-BS4

Beautiful Soup ไม่ขูด URL โดยตรง ใช้งานได้กับไฟล์ HTML หรือ XML สำเร็จรูปเท่านั้น นั่นหมายความว่าคุณไม่สามารถส่ง URL เข้าไปโดยตรงได้ ในการแก้ปัญหานั้น คุณต้องรับ URL ของเว็บไซต์เป้าหมายด้วยไลบรารีคำขอของ Python ก่อนส่งไปยัง Beautiful Soup

เพื่อให้ไลบรารีนั้นพร้อมใช้งานสำหรับมีดโกนของคุณ ให้รันคำสั่งpip installการร้องขอผ่านเทอร์มินัล

ในการใช้ไลบรารี XML parser ให้รันpip install lxmlเพื่อติดตั้ง

ตรวจสอบหน้าเว็บที่คุณต้องการขูด

ก่อนที่จะขูดเว็บไซต์ใด ๆ ที่คุณไม่คุ้นเคย แนวทางปฏิบัติที่ดีที่สุดคือการตรวจสอบองค์ประกอบของเว็บไซต์ คุณสามารถทำได้โดยเปลี่ยนเบราว์เซอร์เป็นโหมดนักพัฒนาซอฟต์แวร์ การใช้ Chrome DevToolsนั้นค่อนข้างง่ายหากคุณใช้ Google Chrome

อย่างไรก็ตาม จำเป็นต้องตรวจสอบหน้าเว็บเพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับแท็ก HTML แอตทริบิวต์ คลาส และรหัส การทำเช่นนี้เป็นการเปิดเผยองค์ประกอบหลักของหน้าเว็บและประเภทเนื้อหา

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

วิธีขูดข้อมูลเว็บไซต์ด้วยซุปที่สวยงาม

เมื่อคุณมีทุกอย่างพร้อมแล้ว ให้เปิดตัวแก้ไขโค้ดที่ต้องการและสร้างไฟล์ Python ใหม่ โดยตั้งชื่อให้กับไฟล์นั้น อย่างไรก็ตาม คุณสามารถใช้ IDE บนเว็บเช่น Jupyter Notebook ได้หากคุณไม่คุ้นเคยกับการรัน Python ผ่านบรรทัดคำสั่ง

ถัดไป นำเข้าไลบรารีที่จำเป็น:

from bs4 import BeautifulSoup import requests

ก่อนอื่น มาดูกันว่าคำขอห้องสมุดทำงานอย่างไร:

from bs4 import BeautifulSoup import requests website = requests.get('http://somewebpages.com') print(website)

เมื่อคุณเรียกใช้โค้ดด้านบน โค้ดจะส่งคืนสถานะ 200 ซึ่งบ่งชี้ว่าคำขอของคุณสำเร็จ มิฉะนั้น คุณจะได้รับสถานะ 400 หรือสถานะข้อผิดพลาดอื่นๆ ที่ระบุคำขอ GET ที่ล้มเหลว

อย่าลืมแทนที่ URL ของเว็บไซต์ในวงเล็บด้วย URL เป้าหมายของคุณ

เมื่อคุณได้รับเว็บไซต์ที่มีการรับคำขอแล้วคุณจะผ่านมันข้ามไปยังสวยซุปซึ่งขณะนี้สามารถอ่านเนื้อหาเป็น HTML หรือไฟล์ XML โดยใช้ตัวใน XML หรือ HTML parser ขึ้นอยู่กับรูปแบบที่คุณเลือก

ดูข้อมูลโค้ดต่อไปนี้เพื่อดูวิธีดำเนินการกับตัวแยกวิเคราะห์ HTML:

from bs4 import BeautifulSoup import requests website = requests.get('http://somewebpages.com') soup = BeautifulSoup(website.content, 'html.parser') print(soup)

โค้ดด้านบนส่งคืน DOM ทั้งหมดของหน้าเว็บที่มีเนื้อหา

คุณยังสามารถรับ DOM เวอร์ชันที่มีการจัดตำแหน่งมากขึ้นโดยใช้วิธีprettify คุณสามารถลองใช้สิ่งนี้เพื่อดูผลลัพธ์:

from bs4 import BeautifulSoup import requests website = requests.get('http://somewebpages.com/') soup = BeautifulSoup(website.content, 'html.parser') print(soup.prettify())

คุณยังสามารถรับเนื้อหาบริสุทธิ์ของหน้าเว็บโดยไม่ต้องโหลดองค์ประกอบด้วยวิธี.text :

from bs4 import BeautifulSoup import requests website = requests.get('http://somewebpages.com/') soup = BeautifulSoup(website.content, 'html.parser') print(soup.text)

วิธีการขูดเนื้อหาของหน้าเว็บด้วยชื่อแท็ก

คุณยังสามารถขูดเนื้อหาในแท็กเฉพาะด้วย Beautiful Soup ในการดำเนินการนี้ คุณต้องใส่ชื่อของแท็กเป้าหมายในคำขอมีดโกนซุปสวย

ตัวอย่างเช่น มาดูกันว่าคุณจะรับเนื้อหาในแท็กh2ของหน้าเว็บได้อย่างไร

from bs4 import BeautifulSoup import requests website = requests.get('http://somewebpages.com/') soup = BeautifulSoup(website.content, 'html.parser') print(soup.h2)

ในข้อมูลโค้ดด้านบนนี้soup.h2จะคืนค่าองค์ประกอบh2แรกของหน้าเว็บและละเว้นส่วนที่เหลือ ในการโหลดองค์ประกอบh2ทั้งหมดคุณสามารถใช้ฟังก์ชัน find_allในตัวและfor loop ของ Python:

from bs4 import BeautifulSoup import requests website = requests.get('http://somewebpages.com/') soup = BeautifulSoup(website.content, 'html.parser') h2tags = soup.find_all('h2') for soups in h2tags: print(soups)

บล็อกของรหัสนั้นส่งคืนองค์ประกอบh2ทั้งหมดและเนื้อหา อย่างไรก็ตาม คุณสามารถรับเนื้อหาโดยไม่ต้องโหลดแท็กโดยใช้วิธี.string :

from bs4 import BeautifulSoup import requests website = requests.get('http://somewebpages.com/') soup = BeautifulSoup(website.content, 'html.parser') h2tags = soup.find_all('h2') for soups in h2tags: print(soups.string)

คุณสามารถใช้วิธีนี้กับแท็ก HTML ใดก็ได้ สิ่งที่คุณต้องทำคือแทนที่แท็กh2ด้วยแท็กที่คุณต้องการ

อย่างไรก็ตาม คุณสามารถขูดแท็กเพิ่มเติมได้โดยส่งรายการแท็กไปยังเมธอดfind_all ตัวอย่างเช่น บล็อกของโค้ดด้านล่างขูดเนื้อหาของa , h2และแท็กชื่อ :

from bs4 import BeautifulSoup import requests website = requests.get('http://somewebpages.com/') soup = BeautifulSoup(website.content, 'html.parser') tags = soup.find_all(['a', 'h2', 'title']) for soups in tags: print(soups.string)

วิธีการขูดเว็บเพจโดยใช้ ID และ Class Name

หลังจากตรวจสอบเว็บไซต์ด้วย DevTools แล้ว จะช่วยให้คุณทราบข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์ id และ class ที่ถือแต่ละองค์ประกอบใน DOM เมื่อคุณมีข้อมูลชิ้นนั้นแล้ว คุณสามารถขูดหน้าเว็บนั้นโดยใช้วิธีนี้ มีประโยชน์เมื่อเนื้อหาขององค์ประกอบเป้าหมายมีการวนซ้ำจากฐานข้อมูล

คุณสามารถใช้วิธีfindสำหรับ id และ class scrapers ต่างจากเมธอดfind_allที่ส่งคืนอ็อบเจ็กต์แบบ iterable วิธีfindทำงานบนเป้าหมายเดียวที่ไม่สามารถทำซ้ำได้ ซึ่งเป็นidในกรณีนี้ ดังนั้น คุณไม่จำเป็นต้องใช้forลูปกับมัน

มาดูตัวอย่างวิธีขูดเนื้อหาของหน้าด้านล่างโดยใช้รหัส:

from bs4 import BeautifulSoup import requests website = requests.get('http://somewebpages.com/') soup = BeautifulSoup(website.content, 'html.parser') id = soup.find(id = 'enter the target id here') print(id.text)

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

โดยพื้นฐานแล้วบรรทัดที่มี id จะกลายเป็น:

my_classes = soup.find(class_ = 'enter the target class name here') print(my_classes.text)

อย่างไรก็ตาม คุณสามารถขูดหน้าเว็บโดยเรียกชื่อแท็กเฉพาะด้วยรหัสหรือคลาสที่เกี่ยวข้อง:

data = soup.find_all('div', class_ = 'enter the target class name here') print(data)

วิธีทำที่ขูดแบบใช้ซ้ำได้ด้วยซุปที่สวยงาม

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

สมมติว่าคุณต้องการขูดราคาเสื้อเชิ้ตจากเว็บไซต์อีคอมเมิร์ซ ตัวอย่างคลาสขูดด้านล่างแยกราคาและแท็กเสื้อด้วยรหัสหรือคลาสที่เกี่ยวข้อง จากนั้นส่งคืนเป็นกรอบข้อมูล Pandas โดยมี 'ราคา' และ Shirt_name เป็นชื่อคอลัมน์

ตรวจสอบให้แน่ใจว่าคุณpip ติดตั้งแพนด้าผ่านเทอร์มินัล หากคุณยังไม่ได้ดำเนินการ

import pandas as pd class scrapeit: try: def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None): if not (website and tag1 and id1 and tag2 and id2)==None: try: page = requests.get(website) soup = BeautifulSoup(page.content, 'html.parser') infotag1 = soup.find_all(tag1, id1) infotag2 = soup.find_all(tag2, id2) priced = [prices.text for prices in infotag1] shirt = [shirts.text for shirts in infotag2] data = { 'Price':priced, 'Shirt_name':shirt} info = pd.DataFrame(data, columns=['Price', 'Shirt_name']) print(info) except: print('Not successful') else: print('Oops! Please enter a website, two tags and thier corresponding ids') except: print('Not successful!')

มีดโกนที่คุณเพิ่งสร้างนั้นเป็นโมดูลที่นำกลับมาใช้ใหม่ได้และคุณสามารถนำเข้าและใช้ในไฟล์ Python อื่นได้ ที่จะเรียกขูดฟังก์ชั่นจากระดับนี้คุณสามารถใช้scrapeit.scrape (URL ของเว็บไซต์ ', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') หากคุณไม่ได้ระบุ URL และพารามิเตอร์อื่นๆคำสั่งelseจะแจ้งให้คุณดำเนินการดังกล่าว

หากต้องการใช้สเคเปอร์นั้นในไฟล์ Python อื่น คุณสามารถนำเข้าได้ดังนี้:

from scraper_module import scrapeit scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

หมายเหตุ: scraper_moduleเป็นชื่อของไฟล์ Python ที่มีคลาส scraper

คุณยังสามารถตรวจสอบเอกสารประกอบของBeautiful Soup ได้หากต้องการเจาะลึกถึงวิธีการใช้งานให้เกิดประโยชน์สูงสุด

ซุปที่สวยงามเป็นเครื่องมือขูดเว็บที่มีคุณค่า

Beautiful Soup เป็นเครื่องขูดหน้าจอ Python อันทรงพลังที่ให้คุณควบคุมวิธีที่ข้อมูลของคุณเข้ามาในระหว่างการขูด เป็นเครื่องมือทางธุรกิจที่มีคุณค่า เนื่องจากช่วยให้คุณสามารถเข้าถึงข้อมูลเว็บของคู่แข่งได้ เช่น ราคา แนวโน้มตลาด และอื่นๆ

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


7 คำสั่งสำคัญเพื่อเริ่มต้นกับ Python สำหรับผู้เริ่มต้น

7 คำสั่งสำคัญเพื่อเริ่มต้นกับ Python สำหรับผู้เริ่มต้น

การเรียนรู้ภาษาการเขียนโปรแกรมใหม่อย่าง Python จะกลายเป็นเรื่องง่ายดาย หากคุณมีแผนงานที่ครอบคลุมซึ่งให้รายละเอียดว่าควรเรียนรู้แนวคิดใดในฐานะผู้เริ่มต้น และวิธีดำเนินการต่อไปเพื่อก้าวไปสู่ขั้นต่อไป แม้แต่โปรแกรมเมอร์ระดับกลางก็ควรหมั่นฝึกฝนพื้นฐานเพื่อสร้างรากฐานที่มั่นคงสำหรับตนเอง

วิธีใช้ Python if Statement

วิธีใช้ Python if Statement

คำสั่ง if เป็นแรงผลักดันของการเขียนโปรแกรมเชิงตรรกะ ส่งผลให้เข้าใจ Pythons ได้ดีขึ้น หากเป็นส่วนเสริมที่สำคัญในทักษะการเขียนโปรแกรม Python ของคุณ

วิธีสร้างและจัดการสภาพแวดล้อมเสมือน Python ของคุณอย่างมีประสิทธิภาพ

วิธีสร้างและจัดการสภาพแวดล้อมเสมือน Python ของคุณอย่างมีประสิทธิภาพ

คุณไม่สามารถทำโครงการในชีวิตจริงใน Python ให้สำเร็จได้หากไม่มีสภาพแวดล้อมเสมือน เครื่องมือต่างๆ เช่น virtualenvwrapper และ virtualenv เป็นเครื่องมือทั่วไปในการสร้างและจัดการสภาพแวดล้อมเสมือนจริงสำหรับการพัฒนาเว็บ ในขณะที่นักวิทยาศาสตร์ด้านข้อมูลใช้อนาคอนดาอย่างแพร่หลาย

วิธีใช้ Python เป็นเครื่องคำนวณบรรทัดคำสั่ง

วิธีใช้ Python เป็นเครื่องคำนวณบรรทัดคำสั่ง

ในขณะที่คุณสามารถใช้เครื่องคิดเลขแบบกราฟิกบนคอมพิวเตอร์ของคุณ ล่ามภาษาโปรแกรม Python สามารถเพิ่มเป็นสองเท่าของเครื่องคิดเลขตั้งโต๊ะ เป็นเรื่องตลกที่เป็นที่นิยมในชุมชน Python ที่กล่าวถึงในบทช่วยสอนอย่างเป็นทางการ คุณสามารถใช้ Python เป็นเครื่องคิดเลขได้อย่างไร

8 บล็อก Java ที่ดีที่สุดสำหรับโปรแกรมเมอร์

8 บล็อก Java ที่ดีที่สุดสำหรับโปรแกรมเมอร์

ในฐานะโปรแกรมเมอร์ คุณควรรับความท้าทายเพื่อเอาตัวรอดและสร้างสิ่งมหัศจรรย์ในด้านการพัฒนาหรือการเขียนโปรแกรม ดังนั้น หากคุณกำลังมองหาการเรียนรู้ภาษาการเขียนโปรแกรมขั้นสูงเพื่อพัฒนาทักษะการทำงาน Java เป็นหนึ่งในผู้มีโอกาสเป็นลูกค้าที่ดีที่สุด

7 คำสั่งสำคัญเพื่อเริ่มต้นกับ Python สำหรับผู้เริ่มต้น

7 คำสั่งสำคัญเพื่อเริ่มต้นกับ Python สำหรับผู้เริ่มต้น

การเรียนรู้ภาษาการเขียนโปรแกรมใหม่อย่าง Python จะกลายเป็นเรื่องง่ายดาย หากคุณมีแผนงานที่ครอบคลุมซึ่งให้รายละเอียดว่าควรเรียนรู้แนวคิดใดในฐานะผู้เริ่มต้น และวิธีดำเนินการต่อไปเพื่อก้าวไปสู่ขั้นต่อไป แม้แต่โปรแกรมเมอร์ระดับกลางก็ควรหมั่นฝึกฝนพื้นฐานเพื่อสร้างรากฐานที่มั่นคงสำหรับตนเอง

หลักการออกแบบเว็บที่ตอบสนองตามอุปกรณ์

หลักการออกแบบเว็บที่ตอบสนองตามอุปกรณ์

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

วิธีนับจำนวนหลักในตัวเลขโดยใช้ C ++, Python และ JavaScript

วิธีนับจำนวนหลักในตัวเลขโดยใช้ C ++, Python และ JavaScript

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

9 ทางเลือก Docker ที่ดีที่สุดสำหรับการจัดการคอนเทนเนอร์

9 ทางเลือก Docker ที่ดีที่สุดสำหรับการจัดการคอนเทนเนอร์

คอนเทนเนอร์มีประโยชน์อย่างมากสำหรับการพัฒนาซอฟต์แวร์ การปรับใช้ และการจัดการในสภาพแวดล้อมเสมือนจริง Docker มีประโยชน์ในกระบวนการคอนเทนเนอร์ แต่ไม่ใช่แพลตฟอร์มเดียวที่อยู่รอบๆ หากคุณกำลังค้นหาทางเลือกอื่นสำหรับ Docker ไม่ต้องมองหาที่ไหนอีกแล้ว รายการนี้แสดงทางเลือก Docker ที่มีคุณลักษณะหลากหลายและมีประสิทธิภาพเพื่อใช้ในโครงการถัดไปของคุณ

SQL vs. NoSQL: ฐานข้อมูลที่ดีที่สุดสำหรับโครงการถัดไปของคุณคืออะไร?

SQL vs. NoSQL: ฐานข้อมูลที่ดีที่สุดสำหรับโครงการถัดไปของคุณคืออะไร?

SQL vs. NoSQL: ฐานข้อมูลที่ดีที่สุดสำหรับโครงการถัดไปของคุณคืออะไร?

วิธีฝังทวีตในโพสต์ WordPress ของคุณ

วิธีฝังทวีตในโพสต์ WordPress ของคุณ

การฝังบริการของบุคคลที่สามในโพสต์ WordPress ของคุณเป็นวิธีที่น่าตื่นเต้นในการดึงดูดความสนใจของผู้เยี่ยมชม เนื้อหาที่ฝังยังให้สัญญาณภาพที่ทำให้การสแกนง่ายขึ้น WordPress ทำให้การเพิ่มเนื้อหาประเภทนี้เป็นเรื่องง่าย

วิธีการลบโฟลเดอร์โมดูลโหนดด้วย npkill

วิธีการลบโฟลเดอร์โมดูลโหนดด้วย npkill

Node.js เป็นสภาพแวดล้อมรันไทม์ JavaScript ที่ให้คุณเรียกใช้ JavaScript นอกเว็บเบราว์เซอร์ ทำให้เป็นตัวเลือกยอดนิยมสำหรับการพัฒนาแอปพลิเคชันทุกประเภท ส่วนหนึ่งของความนิยมนั้นเกิดจากแพ็คเกจ NPM ที่มีอยู่มากมายเพื่อบรรเทาประสบการณ์ของนักพัฒนา

วิธีการเขียนและรวบรวมรหัส Solidity แรกของคุณ

วิธีการเขียนและรวบรวมรหัส Solidity แรกของคุณ

Solidity เป็นภาษาโปรแกรมที่ใช้โดย smart contract บน Ethereum blockchain มันเป็นภาษาการเขียนโปรแกรมเชิงวัตถุที่พิมพ์แบบคงที่