แนวทางการขูดเนื้อเพลงโดยใช้ Python จาก Genius

เผยแพร่แล้ว: 2019-08-08
สารบัญ แสดง
ทำไม One ต้องการรวบรวมข้อมูลจาก Genius?
วิธีการ Web Scrape เนื้อเพลงจาก Genius โดยใช้ Python?
เดอะโค้ดอยู่ที่ไหน?
คำอธิบายของรหัส
ตัวอย่างของหลักจรรยาบรรณในการดำเนินการ
โซลูชันนี้ปรับขนาดได้แค่ไหน?

Rap Genius คืออะไร ?

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

ผู้ใช้อินเทอร์เน็ตส่วนใหญ่ที่ชอบฟังเพลงต้องคุ้นเคยกับ Genius เป็นเว็บไซ ท์ที่กำลังเติบโตอย่างรวดเร็ว ซึ่งจะแบ่งปันสิ่งที่อยู่เบื้องหลังเพลง ความ คิดของศิลปินคืออะไรเมื่อเขาหรือเธอเขียนมันลงไป และอีก มากมาย แม้แต่ศิลปินที่มีชื่อเสียงอย่าง Ariana Grande และ Kendrick Lamar ก็ร่วมมือกับ Genius เพื่อให้โลกได้รับข้อมูลเชิงลึกเกี่ยวกับงานศิลปะของพวกเขา

หากใครต้องการรวบรวมข้อมูลเนื้อเพลง ไม่ว่าจะมีจุดประสงค์อะไรก็ตาม Genius คือเว็บไซต์ที่ต้องไป ฐานข้อมูลมากกว่า 25 ล้านเพลง อัลบั้ม ศิลปิน รวมถึงคำอธิบายประกอบทำให้พวกเขากลายเป็นฐานข้อมูลที่ใหญ่ที่สุดของเนื้อเพลงทุกที่ในโลก

ทำไม One ต้องการรวบรวมข้อมูลจาก Genius?

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

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

วิธีการ Web Scrape เนื้อเพลงจาก Genius โดยใช้ Python?

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

เดอะโค้ดอยู่ที่ไหน?

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

[รหัสภาษา =”หลาม”]
#!/usr/bin/python
#- * -การเข้ารหัส: utf – 8 – * –

นำเข้า urllib.request
นำเข้า urllib.parse
นำเข้า urllib.error
จาก bs4 นำเข้า BeautifulSoup
นำเข้า ssl
นำเข้า json
นำเข้า ast
นำเข้าระบบปฏิบัติการ
จาก urllib.request คำขอนำเข้า urlopen

# สำหรับการละเว้นข้อผิดพลาดของใบรับรอง SSL

ctx = ssl.create_default_context()
ctx.check_hostname = เท็จ
ctx.verify_mode = ssl.CERT_NONE

# ข้อมูลจากผู้ใช้
url = input('ป้อนเนื้อเพลง Genius Url-')

# ทำให้เว็บไซต์เชื่อว่าคุณกำลังเข้าถึงโดยใช้เบราว์เซอร์ Mozilla
req = คำขอ (url, headers = { 'User-Agent' : 'Mozilla/5.0' })
หน้าเว็บ = urlopen(req).read()

# การสร้างวัตถุ BeautifulSoup ของหน้า html เพื่อให้ดึงข้อมูลได้ง่าย

ซุป = BeautifulSoup (หน้าเว็บ 'html.parser')
html = soup.prettify('utf-8')
song_json = {}
song_json["เนื้อเพลง"] = [];
song_json["ความคิดเห็น"] = [];

#แยกชื่อเพลง
สำหรับชื่อใน soup.findAll('title'):
song_json["ชื่อ"] = title.text.strip()

#แยกวันปล่อยเพลง
สำหรับช่วงใน soup.findAll('span', attrs = {'class': 'metadata_unit-info metadata_unit-info–text_only'}):
song_json["วันที่วางจำหน่าย"] = span.text.strip()

#แยกความคิดเห็นในเพลง
สำหรับ div ใน soup.findAll('div', attrs = {'class': 'rich_text_formatting'}):
ความคิดเห็น = div.text.strip().split(“n”)
สำหรับความคิดเห็นในความคิดเห็น:
ถ้า comment!=””:
song_json["ความคิดเห็น"].append(ความคิดเห็น);

#แยกเนื้อเพลง
สำหรับ div ใน soup.findAll('div', attrs = {'class': 'lyrics'}):
song_json["เนื้อเพลง"].append(div.text.strip().split("n"));

#บันทึก json ที่สร้างด้วยชื่อไฟล์เป็นชื่อ + .json
ด้วย open(song_json[“Title”] + '.json', 'w') เป็นไฟล์ outfile:
json.dump (song_json, outfile, เยื้อง = 4, sure_ascii = เท็จ)

# บันทึกเนื้อหา html ลงในไฟล์ html ที่มีชื่อเป็นชื่อ + .html
ด้วย open(song_json[“Title”] + '.html', 'wb') เป็นไฟล์:
ไฟล์.write(html)

print('———-การดึงข้อมูลเสร็จสมบูรณ์ ตรวจสอบไฟล์ json.———-')
[/รหัส]

ในการรันโค้ดที่ให้ไว้ด้านบน สิ่งที่คุณต้องทำคือบันทึกลงในไฟล์ที่มีนามสกุล .py ดังนั้นคุณสามารถบันทึกลงในไฟล์ชื่อ songLyricsExtractor.py จากนั้นให้เรียกใช้คำสั่งจากเทอร์มินัล:

[รหัสภาษา =”หลาม”]
python songLyricsExtractor.py
[/รหัส]

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

คำอธิบายของรหัส

ก่อนที่เราจะเรียกใช้โค้ดและทำความเข้าใจกับสิ่งที่ให้มา เรามาพยายามทำความเข้าใจโค้ดกันเสียก่อน เช่นเคย เราใช้ BS4 (หรือ Beautiful Soup) ซึ่งเป็นไลบรารีที่แยกวิเคราะห์ผ่าน หน้า n HTML

ในตอนเริ่มต้น เราได้หน้าเว็บและแปลงเป็นวัตถุ Beautiful Soup จากตำแหน่งที่เราสามารถรับ divs, spans, titles และ tag อื่นๆ ด้วยคุณลักษณะเฉพาะ เราใช้เทคนิคเหล่านี้ในการรวบรวมข้อมูลเนื้อเพลง ความคิดเห็น ชื่อของหน้าเว็บ ตลอดจนวันที่เผยแพร่เพลงจริงๆ เมื่อเราคัดลอกข้อมูลนี้แล้ว เราจะบันทึกเป็นไฟล์ JSON โดยมีชื่อ- ชื่อเรื่องของนามสกุล page+.json เรายังบันทึกไฟล์ HTML ด้วยชื่อของส่วนขยาย page+.html สิ่งนี้ทำเพื่อให้สามารถวิเคราะห์หน้า HTML และพบจุดข้อมูลเพิ่มเติมในอนาคต

ตัวอย่างของหลักจรรยาบรรณในการดำเนินการ

ในการรันโค้ดและให้ลิงก์ของเพลงบน Genius คุณจะได้รับ JSON ที่จะมีลักษณะเหมือนกับที่แสดงด้านล่าง ด้านล่างคือ JSON ที่เราได้รับสำหรับ Looking for America โดย Lana Del Rey เราได้นำเสนอ JSON เพียงตัวเดียวเนื่องจากมีขนาดใหญ่มาก แต่คุณสามารถเรียกใช้ JSON กับเพลงโปรดของคุณได้เช่นกัน

[รหัสภาษา =”หลาม”]
{
“เนื้อเพลง”: [
[
“[ข้อ 1]”,
“ไปเที่ยวซานฟรานซิสโก”
“เพื่อนของเราทุกคนบอกว่าเราจะล้อเลียน”
“ไม่ได้ผล ฉันก็เลยไปเฟรสโน”
“มันเป็นไดรฟ์ที่สวยงามมาก”,
“ดึงขึ้นไปดูเด็ก ๆ ในสวนสาธารณะ”
“เราเคยห่วงแต่พวกเขาหลังมืดค่ำ”
“”,
“[คอรัส]”,
“ฉันยังคงมองหาอเมริกาในแบบของตัวเอง”
“ผู้ไม่มีปืน ที่ซึ่งธงสามารถโบยบินได้”
“ไม่มีระเบิดบนท้องฟ้า มีแต่ดอกไม้ไฟเมื่อคุณกับฉันชนกัน”
“มันเป็นแค่ความฝันที่ฉันคิดไว้”,
“มันเป็นแค่ความฝันที่ฉันคิดไว้”,
“มันเป็นแค่ความฝันที่ฉันคิดไว้”,
“”,
“[ข้อ 2]”,
“ ฉันบินกลับไปที่นิวยอร์กซิตี้”
“คิดถึงแนวแม่น้ำฮัดสัน”
“นั่งรถไฟไปทะเลสาบเพลซิด”
“นั่นเป็นอีกสถานที่และเวลา ที่ไหน”
“ฉันเคยไปขับรถเล่นและฟังเพลงบลูส์”
“หลายสิ่งหลายอย่างที่ฉันคิดสองครั้งก่อนที่จะทำ ไม่”,
“”,
“[คอรัส]”,
“ฉันยังคงมองหาอเมริกาในแบบของตัวเอง”
“ผู้ไม่มีปืน ที่ซึ่งธงสามารถโบยบินได้”
“ไม่มีระเบิดบนท้องฟ้า มีแต่ดอกไม้ไฟเมื่อคุณกับฉันชนกัน”
“มันเป็นแค่ความฝันที่ฉันคิดไว้”,
“มันเป็นแค่ความฝันที่ฉันคิดไว้”,
“มันเป็นแค่ความฝันที่ฉันคิดไว้”,
“มันเป็นแค่ความฝันที่ฉันคิดไว้”
]
],
“ความคิดเห็น”: [
[
“มองหาอเมริกา” เป็นเพลงที่ลาน่าเขียนไว้เมื่อวันที่ 5 สิงหาคม 2562 เกี่ยวกับเหตุกราดยิงทั่วสหรัฐฯ เมื่อเธอกลับมาที่แอลเอ ข้อความของเพลงนั้นอาศัยลาน่าฝันถึงสถานการณ์ที่ดีขึ้นสำหรับคนอเมริกัน หัวข้อที่เธอ เคยร้องในเพลงอย่าง “Coachella – Woodstock in My Mind” และ “When The World Was at War We Kept Dancing” Del Rey ปล่อยเพลงผ่านแพลตฟอร์มสตรีมมิ่งเมื่อวันที่ 9 สิงหาคม 2019 เป็นซิงเกิล”,
“ชื่อเพลงอาจอ้างอิงถึง “อเมริกา” โดย Simon & Garfunkel:”,
“พวกเขามาตามหาอเมริกากันหมดแล้ว”
“เดล เรย์ใช้อินสตาแกรมของเธอเพื่อแชร์วิดีโอการร้องเพลงของเธอในสตูดิโอกับเพื่อนและโปรดิวเซอร์ Jack Antonoff”
],
[
“Del Rey แชร์เพลงผ่าน Instagram เพิ่ม:”,
“สวัสดี ผู้คนกลับมาจากมอนเตซิโตแต่เช้าตรู่กับพี่ชายของฉันและขอให้แจ็ค แอนโทนอฟเข้ามาในเมืองเพราะฉันมีเพลงในใจที่อยากจะเขียน ตอนนี้ฉันรู้แล้วว่าฉันไม่ใช่นักการเมืองและไม่ได้พยายามจะขอโทษที่มีความคิดเห็น แต่เมื่อพิจารณาจากเหตุกราดยิงและเหตุกราดยิงในสองสามวันที่ผ่านมาซึ่งส่งผลกระทบต่อฉันจริงๆ ในระดับเซลล์ ฉันแค่อยากจะโพสต์วิดีโอนี้ที่วิศวกรของเรา Laura ถ่ายเมื่อ 20 นาทีที่แล้ว ฉันหวังว่าคุณจะชอบมัน. ฉันกำลังร้องเพลงรักกับคอรัสที่ฉันบันทึกเมื่อเช้านี้ ฉันจะเรียกมันว่า 'มองหาอเมริกา'”
]
],
“ชื่อ”: “Lana Del Rey – Looking For America Lyrics | เนื้อเพลงอัจฉริยะ”,
“วันที่วางจำหน่าย”: “9 สิงหาคม 2019”
}
[/รหัส]

โซลูชันนี้ปรับขนาดได้แค่ไหน?

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

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

  1. การส่งข้อมูลในรูปแบบเฉพาะ
  2. ข้อมูลรีเฟรชใน ความถี่ ปกติ
  3. ไม่มีค่าบำรุงรักษาและโครงสร้างพื้นฐาน

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