استخراج تعليقات يوتيوب باستخدام Selenium
فيما يلي الخطوات التي يمكنك اتخاذها للقيام بذلك
- جمع البيانات: يمكنك استخدام السيلينيوم لعمل تجريف الويب من موقع يوتيوب. لاحظ أن التعليقات التوضيحية متكررة بطبيعتها. عندما أقول متكررة، فهذا يعني أنه يمكن للأشخاص التعليق أعلى التعليقات. تحتاج أيضًا إلى تحديد جميع نقاط البيانات اللازمة للتحليل. في الأسفل يكون يمكنك استخراج بعض التفاصيل الخاصة بقائمة أفضل 10 مقاطع فيديو
• نص عنوان الفيديو • عنوان URL للفيديو • اشتراك القناة • عدد المشاهدات • رابط تاريخ النشر
2. تنظيف البيانات: سيستهلك هذا الكثير من الوقت، لأن الأشخاص يمكنهم التعليق بأي لغة، واستخدام السخرية المبتسمة، وما إلى ذلك. هناك العديد من مكتبات Python التي يمكن أن تساعدك في تنظيف بياناتك. انطلق واستكشف هذا بعمق.
3. تحليل المشاعر: بمجرد حصولك على بيانات نظيفة، يمكنك إجراء تحليل البرمجة اللغوية العصبية (NLP) وتحليل المشاعر، وفي النهاية تصور فوق ذلك.
الخطوت
الخطوة 1: استيراد جميع المكتبات المطلو
from selenium import webdriver
import time
import os
import csv
import pandas as pd
from math import ceil
الخطوة 2: افتح الملف لكتابة البيانات المستخرجة من youtube
# Creates a new .csv file that the data will be written to
csv_file = open('c:\\ISB\\output_scraping.csv', 'w', encoding="UTF-8", newline="")
writer = csv.writer(csv_file)
الخطوة 3: اكتب رأس أعمدة البيانات في ملف csv المفتوح
# write header names
writer.writerow(
['url', 'link_title', 'channel', 'no_of_views', 'time_uploaded', 'comment', 'author', 'comment_posted',
'no_of_replies','upvotes','downvotes'])
الخطوة 4: استدعاء webdriver وتشغيل موقع youtube.
الخطوة 5: باستخدام برنامج التشغيل ، ابحث ديناميكيًا عن أي كلمة رئيسية كما في المثال أدناه ، لقد بحثت عن “Kishore Kumar”نمت لبضع ثوان لإعطاء الوقت المتصفح لتحميل الصفحة
الخطوة 6: بالنسبة لكل 10 روابط عليا ، استخرج العناصر أدناه واحفظها في القائمة المعنية
• Video Title text
• Video URL
• Subcription Channel
• No of Views
• Date link posted
الخطوة 7: إطلاق عنوان url لأفضل عشرة روابط مستخرجة. لكل عنوان URL ، قم بالتمرير لأسفل إلى الموضع المطلوب لتحميل قسم التعليقات. -فرز حسب أعلى التعليقات – قم بالتمرير لأسفل مرتين لتحميل 50 تعليقًا على الأقل – لكل تعليق (50 تعليقًا أو أقل) ، قم باستخراج العناصر أدناه ووضعها في كتلة التجريب للتعامل مع الاستثناء في حالة عدم وجود عنصر معين للتعليق • التعليق نص • اسم المؤلف • تاريخ نشر التعليق • عدد المشاهدات • التأييد / التصويت المعارض
الخطوة 8: إنشاء قاموس للعناصر المستخرجة من الرابط الرئيسي والرابط الفرعي والكتابة إلى ملف csv المفتوح.
# open chrome
youtube_pages = "https://www.youtube.com/"
locationOfWebdriver = "c:\\ISB\\chromedriver.exe"
driver = webdriver.Chrome(locationOfWebdriver)
driver.get(youtube_pages)
time.sleep(10)
try:
print("=" * 40) # Shows in terminal when youtube summary page with search keyword is being scraped
print("Scraping " + youtube_pages)
search = driver.find_element_by_id('search')
search.send_keys("Kishore Kumar")
driver.find_element_by_id('search-icon-legacy').click()
time.sleep(20)
vtitle = driver.find_elements_by_id('video-title')
subscription = driver.find_elements_by_id('byline')
views = driver.find_elements_by_xpath('//div[@id="metadata-line"]/span[1]')
posted = driver.find_elements_by_xpath('//div[@id="metadata-line"]/span[2]')
tcount = 0
href = []
title = []
channel = []
numview = []
postdate = []
while tcount < 10:
href.append(vtitle[tcount].get_attribute('href'))
channel.append(subscription[tcount].get_attribute('title'))
title.append(vtitle[tcount].text)
numview.append(views[tcount].text)
postdate.append(posted[tcount].text)
tcount = tcount +1
# launch top ten extracted links and extract comment details
tcount = 0
while tcount < 10:
youtube_dict ={}
# extract comment section of top ten links
url = href[tcount]
print (url)
driver.get(url)
time.sleep(5)
try:
print("+" * 40) # Shows in terminal when details of a new video is being scraped
print("Scraping child links ")
#scroll down to load comments
driver.execute_script('window.scrollTo(0,390);')
time.sleep(15)
#sort by top comments
sort= driver.find_element_by_xpath("""//*[@id="icon-label"]""")
sort.click()
time.sleep(10)
topcomments =driver.find_element_by_xpath("""//*[@id="menu"]/a[1]/paper-item/paper-item-body/div[1]""")
topcomments.click()
time.sleep(10)
# Loads 20 comments , scroll two times to load next set of 40 comments.
for i in range(0,2):
driver.execute_script("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight))")
time.sleep(10)
#count total number of comments and set index to number of comments if less than 50 otherwise set as 50.
totalcomments= len(driver.find_elements_by_xpath("""//*[@id="content-text"]"""))
if totalcomments < 50:
index= totalcomments
else:
index= 50
ccount = 0
while ccount < index:
try:
comment = driver.find_elements_by_xpath('//*[@id="content-text"]')[ccount].text
except:
comment = ""
try:
authors = driver.find_elements_by_xpath('//a[@id="author-text"]/span')[ccount].text
except:
authors = ""
try:
comment_posted = driver.find_elements_by_xpath('//*[@id="published-time-text"]/a')[ccount].text
except:
comment_posted = ""
try:
replies = driver.find_elements_by_xpath('//*[@id="more-text"]')[ccount].text
if replies =="View reply":
replies= 1
else:
replies =replies.replace("View ","")
replies =replies.replace(" replies","")
except:
replies = ""
try:
upvotes = driver.find_elements_by_xpath('//*[@id="vote-count-middle"]')[ccount].text
except:
upvotes = ""
youtube_dict['url'] = href[tcount]
youtube_dict['link_title'] = title[tcount]
youtube_dict['channel'] = channel[tcount]
youtube_dict['no_of_views'] = numview[tcount]
youtube_dict['time_uploaded'] = postdate[tcount]
youtube_dict['comment'] = comment
youtube_dict['author'] = authors
youtube_dict['comment_posted'] = comment_posted
youtube_dict['no_of_replies'] = replies
youtube_dict['upvotes'] = upvotes
writer.writerow(youtube_dict.values())
ccount = ccount +1
except Exception as e:
print(e)
driver.close()
tcount = tcount +1
print("Scrapping process Completed")
csv_file.close()
except Exception as e:
print(e)
driver.close()
هذا ما سيظهر لك :
========================================
Scraping https://www.youtube.com/
https://www.youtube.com/watch?v=b_iSFNJmAhU
++++++++++++++++++++++++++++++++++++++++
Scraping child links
https://www.youtube.com/watch?v=GSmXU2Q7TU8
++++++++++++++++++++++++++++++++++++++++
Scraping child links
https://www.youtube.com/watch?v=uA67M0Lihz0
++++++++++++++++++++++++++++++++++++++++
Scraping child links
https://www.youtube.com/watch?v=6vCbtPN9skk
++++++++++++++++++++++++++++++++++++++++
Scraping child links
https://www.youtube.com/watch?v=aqBHgUkoZCE
++++++++++++++++++++++++++++++++++++++++
Scraping child links
https://www.youtube.com/watch?v=duee3ROzuKg
++++++++++++++++++++++++++++++++++++++++
Scraping child links
https://www.youtube.com/watch?v=nEnLt3pasxE
++++++++++++++++++++++++++++++++++++++++
Scraping child links
https://www.youtube.com/watch?v=lKVIElw2IZM
++++++++++++++++++++++++++++++++++++++++
Scraping child links
https://www.youtube.com/watch?v=AMuRRXCuy-4
++++++++++++++++++++++++++++++++++++++++
Scraping child links
https://www.youtube.com/watch?v=MDXFi3avqo0
++++++++++++++++++++++++++++++++++++++++
Scraping child links
Scrapping process Completed
شكرا للمتابعه