แนวทางการขูดเนื้อเพลงโดยใช้ Python จาก Genius
เผยแพร่แล้ว: 2019-08-08Rap 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 ประเภทนี้เหมาะสำหรับนักเล่นอดิเรกที่เป็นคู่หูหรือผู้ที่มีความต้องการเพียงครั้งเดียว ในกรณีที่ความต้องการของคุณเป็นเชิงพาณิชย์มากขึ้นและคุณมีปัญหาในการขูดเว็บซึ่งคุณ ต้องการคุณลักษณะเช่น:
- การส่งข้อมูลในรูปแบบเฉพาะ
- ข้อมูลรีเฟรชใน ความถี่ ปกติ
- ไม่มีค่าบำรุงรักษาและโครงสร้างพื้นฐาน
จากนั้นคุณควรไปกับผู้ให้บริการขูดเว็บเช่น PromptCloud ทีมงานของเราที่ PromptCloud ภาคภูมิใจในการให้บริการโซลูชั่นการขูดเว็บระดับองค์กรแก่ทีมธุรกิจทั่วโลก เพื่อให้พวกเขาใช้ข้อมูลภายในเวิร์กโฟลว์ทางธุรกิจ และทำการตัดสินใจโดยใช้ข้อมูลเป็นหลัก
