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

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

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





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





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

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





ฉันจะดูผู้ติดตามของฉันบน youtube ได้อย่างไร

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

อย่างไรก็ตาม หากคุณใช้ Debian หรือ Linux คำสั่งข้างต้นยังคงใช้งานได้ แต่คุณสามารถติดตั้งด้วยตัวจัดการแพ็คเกจได้โดยการเรียกใช้ apt-get ติดตั้ง python3-bs4 .



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

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





ในการใช้ไลบรารีตัวแยกวิเคราะห์ XML ให้เรียกใช้ pip ติดตั้ง 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 เป้าหมายของคุณเสมอ

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

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

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

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

คุณยังสามารถรับ DOM เวอร์ชันที่สอดคล้องมากขึ้นได้โดยใช้ปุ่ม เสริมสวย กระบวนการ. คุณสามารถลองใช้สิ่งนี้เพื่อดูผลลัพธ์:

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

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

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

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

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

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

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

ในข้อมูลโค้ดด้านบน ซุป.h2 ส่งคืนครั้งแรก ชั่วโมง2 องค์ประกอบของหน้าเว็บและละเว้นส่วนที่เหลือ ในการโหลดทั้งหมด ชั่วโมง2 องค์ประกอบ คุณสามารถใช้ find_all ฟังก์ชั่นในตัวและ สำหรับ ลูปของ 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)

บล็อกของรหัสนั้นส่งคืนทั้งหมด ชั่วโมง2 องค์ประกอบและเนื้อหา อย่างไรก็ตาม คุณสามารถรับเนื้อหาโดยไม่ต้องโหลดแท็กโดยใช้ปุ่ม .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 ใดก็ได้ สิ่งที่คุณต้องทำคือเปลี่ยน ชั่วโมง2 แท็กกับคนที่คุณชอบ

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

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 เมื่อคุณมีข้อมูลชิ้นนั้นแล้ว คุณสามารถขูดหน้าเว็บนั้นโดยใช้วิธีนี้ มีประโยชน์เมื่อเนื้อหาขององค์ประกอบเป้าหมายถูกวนออกจากฐานข้อมูล

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

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

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)

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

โดยพื้นฐานแล้วบรรทัดที่มี 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)

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

คุณสามารถสร้างคลาสและรวมโค้ดก่อนหน้าทั้งหมดเข้าด้วยกันในฟังก์ชันในคลาสนั้นเพื่อสร้างมีดโกนที่นำกลับมาใช้ใหม่ได้ซึ่งรับเนื้อหาของแท็กและรหัสบางส่วน เราสามารถทำได้โดยการสร้างฟังก์ชันที่ยอมรับห้าอาร์กิวเมนต์: 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 และพารามิเตอร์อื่นๆ ค่า อื่น ข้อความแจ้งให้คุณดำเนินการดังกล่าว

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

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

บันทึก: scraper_module เป็นชื่อของไฟล์ Python ที่มีคลาสสแครปเปอร์

นอกจากนี้คุณยังสามารถตรวจสอบ เอกสารซุปที่สวยงาม หากคุณต้องการเจาะลึกลงไปว่าคุณจะใช้ประโยชน์จากมันให้ดีที่สุดได้อย่างไร

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

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

ถ่ายโอนรูปภาพจาก iphone ไปยัง macbook

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

แบ่งปัน แบ่งปัน ทวีต อีเมล เครื่องมือขูดเว็บที่ดีที่สุดออนไลน์

ต้องการรวบรวมข้อมูลจากเว็บไซต์เพื่อการวิเคราะห์หรือไม่? เครื่องมือขูดเว็บเหล่านี้ทำให้ง่าย

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • การเขียนโปรแกรม
  • Python
เกี่ยวกับผู้เขียน อิดิโซ โอมิโซลา(94 บทความที่ตีพิมพ์)

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

เพิ่มเติมจาก Idowu Omisola

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก