O
O
OlyaZZZzzzzz82022-04-04 17:56:01
Python
OlyaZZZzzzzz8, 2022-04-04 17:56:01

I'm trying to parse and classify comments from youtube, I get such errors, maybe someone knows?

Here is the code:

from apiclient.discovery import build
import argparse
import unidecode
import time
import os
import pandas as pd

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from textblob import TextBlob

import re

def sentiment(polarity):
  if polarity < 0:
    p="Negative"
  elif polarity > 0:
    p="Positive"
  else:
    p="Neutral"
  return p

def scrape_comments(youtube_video_url,Movie_name):
  s=Service(r"C:\\Users\\Olga\\Downloads\\chromedriver_win32\\chromedriver.exe")
  chrome_path= r"C:\Users\Olga\Downloads\chromedriver_win32\\chromedriver.exe"
  
  

  driver = webdriver.Chrome(service=s)
  driver.get(youtube_video_url)
  driver.maximize_window()
  driver.implicitly_wait(50)

  driver.execute_script('window.scrollTo(0, 600);')
  time.sleep(50)

  print ("scrolled")

  sort= driver.find_element_by_xpath("""//*[@id="icon_label"]""")
  driver.implicitly_wait(15)
  sort.click()
  sort.time.sleep(10)
  topcomments =driver.find_elements_by_xpath("""//*[@id="menu"]/a[1]/paper-item-body/div[1]""")
  topcomments.click()
  time.sleep(10)

  for i in range(0,2):
    driver.execute_script("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight?document.documentElement.clientHeight," +
                    "document.body.scrollHeight,document.documentElement.clientHeight));"); 
    time.sleep(10)
  totalcomments= len(driver.find_elements_by_xpath("""//*[@id="content-text"]"""))
  
  if totalcomments < 20:
      index= totalcomments
  else:
      index= 20

  ccount = 0
  comments= []
  while ccount < index:
      try:

        comment = driver.find_elements_by_xpath('//*[@id="content-text"]')[ccount].text
        ccount=ccount+1
        print(comment)
        comments.append(comment)
      except:
        comment = ""
  polarity=[]
  subjectivity=[]
  sentiment_type=[]
  for elm in comments:
      x=TextBlob(elm)
      print(elm)
      print("Polarity : "+str(x.sentiment.polarity))
      print("Subjectivity :"+str(x.sentiment.subjectivity))
      polarity.append(x.sentiment.subjectivity)
      subjectivity.append(x.sentiment.subjectivity)
      s=sentiment(x.sentiment.polarity)
      print("Sentiment Type :"+s)
      sentiment_type.append(s)

      return driver

  dataframe={"comment":comments,"polarity":polarity,"sentiment_type":sentiment_type,"sebjectivity":subjectivity}
  df = pd.DataFrame.from_dict(dataframe, orient='index')
  dfl=df.transpoze()
  dfl.columns = ['comment', 'polarity', 'sentiment_type', 'subjectivity']
  dfl.to_txt(r"C:\\Users\\Olga\\Desktop\\comment_sentiment_"+Movie_name+".txt", header=True, encoding='utf-8', index=False)

def youtube_video_url(options):
    youtube = build("youtube", "v3", developerKey="AIzaSyDuV1ssRswKsW2uUjOWIyXWVh3sDDovBAw")

    search_response = youtube.search().list(q=options.q, part="id,snippet", maxResults=options.max_results).execute()
    for search_result in search_response.get("items", []):
        if search_result["id"]["kind"] == "youtube#video":
            videoId = search_result["id"]["videoId"]
            print("videoId: " +str(videoId))
            
            url="https://www.youtube.com/watch?v="+videoId
            print(url)
    return url
  
if __name__ == "__main__":
    print("Enter the Movie Name : ")
    Movie_name=str(input())
    parser = argparse.ArgumentParser(description='youtube search')
    parser.add_argument("--q", help="Search term", default=Movie_name+"Movie Trailer 2020")
    parser.add_argument("--max-results", help="Max results", default=1)
    args = parser.parse_args()

    youtube_video_url=youtube_video_url(args)
    scrape_comments(youtube_video_url,Movie_name)

The errors it gives are:
Warning (from warnings module):
File "C:\Users\Olga\Desktop\1.py", line 44
sort= driver.find_element_by_xpath("""//*[@id="icon_label"] """)
DeprecationWarning: find_element_by_xpath is deprecated. Please use find_element(by=By.XPATH, value=xpath) instead
Traceback (most recent call last):
File "C:\Users\Olga\Desktop\1.py", line 118, in
scrape_comments(youtube_video_url,Movie_name)
File "C:\Users\Olga\Desktop\1.py", line 44, in scrape_comments
sort= driver.find_element_by_xpath("""//*[@id="icon_label"]""")
File "C:
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Users\Olga\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py" , line 1248, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "C:\Users\Olga\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py ", line 425, in execute
self.error_handler.check_response(response)
File "C:\Users\Olga\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\errorhandler.py" , line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="icon_label"]"}
(Session info: = 100.0.4896.60 chrome)
Stacktrace:
Backtrace:
Ordinal0 [0x00449943 + 2595139]
Ordinal0 [0x003DC9F1 + 2148849]
Ordinal0 [0x002D4528 + 1066280]
Ordinal0 [0x00300FD4 + 1249236]
Ordinal0 [0x003011CB + 1249739]
Ordinal0 [0x0032D812 + 1431570]
Ordinal0 [0x0031BA34 + 1358388]
Ordinal0 [0x0032BAF2+1424114]
Ordinal0 [0x0031B806+1357830]
Ordinal0 [0x002F6086+1204358]
Ordinal0 [0x002F6F96+1208214]
GetHandleVerifier [0x005EB232+1658114]
GetHandleVerifier [0x006A312C+2411516]
GetHandleVerifier [0x004DF261+560433]
GetHandleVerifier [0x004DE366+556598]
Ordinal0 [0x003E286B+2173035]
Ordinal0 [0x003E75F8+2192888]

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
AVKor, 2022-04-04
@OlyaZZZzzzzz8

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="icon_label"]"}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question