Conas sonraí YouTube ríthábhachtach a scrape le Python

Tuairimí: 0

Ní mór do chruthaitheoirí YouTube feidhmíocht a gcuid físeáin a mheas; Tá anailís a dhéanamh ar thuairimí dearfacha agus diúltacha, agus comparáid a dhéanamh idir a n -ábhar le daoine eile sna catagóirí céanna nó i gcatagóirí difriúla riachtanach.

Is féidir le sracadh de láimh trí fhíseáin sa phost a bheith teann agus am-íditheach do chruthaitheoirí. Is é seo go beacht nuair a éiríonn script scríobtha YouTube thar a bheith luachmhar. Beimid ag forbairt script YouTube atá deartha chun an próiseas bailithe sonraí a uathoibriú sa treoir seo.

Scraper a chruthú chun sonraí a bhaint as YouTube

Chun go bhfeidhmeoidh an script i gceart, ní mór dúinn roinnt pacáistí a shuiteáil. Is é an chéad phacáiste le suiteáil ná seiléiniam-sreang, síneadh ar seiléiniam a chuireann ar a gcumas cumraíocht seachfhreastalaí cuí, agus seiléiniam féin le haghaidh ranganna agus modúil riachtanacha. Chun na pacáistí seo a shuiteáil, cuir an t -ordú seo a leanas i do chomhéadan ordaithe:

pip install selenium-wire selenium blinker==1.7.0

Anois déanaimis díriú ar na hallmhairí.

Céim 1: Leabharlanna agus Pacáistí a Allmhairiú

Ag an bpointe seo, tá sé tábhachtach na leabharlanna agus na pacáistí a iompórtáil a úsáidfear inár script chun idirghníomhú le heilimintí gréasáin. Ina theannta sin, ba cheart dúinn modúil a chur san áireamh le haghaidh próiseála sonraí agus bainistíocht runtime chun an script a fhorghníomhú go héifeachtach.

from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import json
import time

Cabhraíonn an modúl JSON le sonraí eastósctha a athrú go sonraí JSON atá formáidithe i gceart, rud a chinntíonn an cur i láthair sonraí is fearr. In ainneoin ár IP a chumhdach, tá an modúl ama riachtanach chun randamacht a thabhairt isteach i ngníomhartha, rud a chuireann cosc ​​ar iompar cosúil le script.

Ina theannta sin, tá an modúl seo ríthábhachtach chun a chinntiú go bhfuil na heilimintí a theastaíonn uainn chun sonraí a bhaint as an leathanach luchtaithe. Is éard atá sna hallmhairí atá fágtha ná ranganna nó fo -mhodúla riachtanacha a dhéanann gníomhartha ar leith agus déanfar iad a mhionsaothrú sna codanna ina dhiaidh sin den chód.

Céim 2: Tiománaí Chrome Selenium a chur ar bun

Aon uair a ritheann tú cás seiléiniam ag baint úsáide as script i Python, úsáideann an script ár seoladh IP do cibé gníomhaíocht is mian linn a dhéanamh. Tá sé seo contúirteach, go háirithe i gcás suíomhanna gréasáin ar nós YouTube le polasaithe dochta i gcoinne faisnéis a scríobadh óna láithreán gréasáin, is féidir leat a gcomhad robots a sheiceáil le haghaidh tagartha níos fearr. D'fhéadfadh iarmhairtí seo a bheith ina srianta sealadacha ar do IP ó rochtain a fháil ar ábhar YouTube.

Chun é sin go léir a sheachaint, tá cúpla rud is gá dúinn a dhéanamh. Ní mór dúinn 3 athróg a chruthú chun sonraí an tseachvótálaí a chur ar fáil trína mbeimis ag teacht ar an leathanach. Ansin cruthaímid athróg roghanna, chrome_options, a rachaidh muid isteach i gcás Chrome Webdriver agus mar sin tá a fhios ag seiléiniam cén seachvótálaí a bheidh le húsáid nuair a scríobhann sé. Téimid sna sonraí seachfhreastalaí mar argóintí do chrome_options agus socraímid ár seachvótálaí.

# Sonraigh an seoladh seachfhreastalaí le hainm úsáideora agus pasfhocal
proxy_address = ""
proxy_username = ""
proxy_password = ""
# Roghanna Chrome a chur ar bun leis an seachvótálaí agus an fíordheimhniú
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
# Cruthaigh cás Webdriver le sreangán seiléiniam
driver = wiredriver.Chrome(options=chrome_options)

Céim 3: An fhaisnéis a bhaint as an leathanach físe YouTube

Cruthaigh athróg darb ainm “YouTube_URL_TO_SCRAPE” chun url an leathanaigh tuirlingthe YouTube a stóráil. Úsáidtear an t -athróg seo ansin sa mhodh “tiománaí.get ()” chun seiléiniam a threorú chun leathanach sonrach a oscailt le haghaidh scríobtha. Osclóidh an gníomh seo fuinneog chrome ar leithligh nuair a bheidh an script á reáchtáil.

youtube_url_to_scrape = ""
# Déan do uathoibriú seiléiniam le cumais fheabhsaithe na seiléiniam-sreang
driver.get(youtube_url_to_scrape)

Ansin, sainmhínímid an fheidhm “extract_information ()”, a shroicheann, mar a thugann an t -ainm, an fhaisnéis riachtanach ón leathanach.

Tá sé tábhachtach a chinntiú go bhfuil na heilimintí go léir ar an leathanach luchtaithe. Chun é seo a dhéanamh, bainimid úsáid as an rang Webdriverwait chun an script a sos ar a laghad go dtí go bhfuil an cnaipe "níos mó" ar fáil agus cliceáil, a chuirtear i bhfeidhm faoin athróg "eilimint". Nuair a bhíonn sé ar fáil, cuireann Selenium gníomh cliceáil JavaScript i bhfeidhm a cheadaíonn rochtain ar chur síos iomlán an fhíseáin.

Chun aghaidh a thabhairt ar an tsaincheist tráchta dinimiciúil a luadh níos luaithe, tá réiteach á chur i bhfeidhm againn chun deireadh a chur le haon saincheisteanna gaolmhara. Ag baint úsáide as an rang Gníomhartha agus an modúl ama, déanaimid scrollú síos dhá uair gach 10 soicind, ag déanamh cinnte go scríobann tú an oiread tuairimí agus is féidir. Cosnaíonn an cur chuige réamhghníomhach seo i gcoinne scrogaill fhéideartha a bhaineann le hábhar atá luchtaithe go dinimiciúil.

def extract_information() -> dict:
   try:
       element = WebDriverWait(driver, 15).until(
           EC.presence_of_element_located((By.XPATH, '//*[@id="expand"]'))
       )

       element.click()

       time.sleep(10)
       actions = ActionChains(driver)
       actions.send_keys(Keys.END).perform()
       time.sleep(10)
       actions.send_keys(Keys.END).perform()
       time.sleep(10)

Tá bealaí éagsúla ann chun eilimintí a chuardach ag baint úsáide as Webdriver Seiléiniam. Is féidir leat cuardach a dhéanamh le id, class_name, xpath, srl. Don threoir seo, beimid ag úsáid teaglaim seachas modh amháin.

Is córas níos casta fós é XPath chun athróga a aimsiú le linn scríobtha. Meastar gurb é an ceann is casta é; Mar sin féin, tá Chrome éasca sin.

Agus athbhreithniú á dhéanamh ar an gcód ag baint úsáide as uirlis cigireachta Chrome, ní gá ach cliceáil ar dheis chun an XPath a chóipeáil. Nuair a chóipeáil tú, is féidir leat an fheidhm `find_elements` a úsáid chun na heilimintí go léir ina bhfuil an fhaisnéis inmhianaithe a aithint, mar shampla an teideal físe, an tuairisc, srl.

Tá sé ríthábhachtach a thabhairt faoi deara go bhféadfadh gnéithe áirithe ar an leathanach tréithe comhchosúla a roinnt, rud a d'fhéadfadh a bheith ina gcúis leis an nglao `find_elements ()` chun liosta a thabhairt ar ais seachas teaghrán. I gcásanna den sórt sin, ní mór duit an liosta a scrúdú chun innéacs na faisnéise ábhartha a shonrú agus an téacs a bhaint.

Ar deireadh, seoltar athróg foclóra darb ainm `data` ar ais, ag cuimsiú an fhaisnéis go léir a tugadh le linn scríobadh, Ergo, atá riachtanach don rannóg ina dhiaidh sin.

 video_title = driver.find_elements(By.XPATH, '//*[@id="title"]/h1')[0].text

   owner = driver.find_elements(By.XPATH, '//*[@id="text"]/a')[0].text

   total_number_of_subscribers = \
       driver.find_elements(By.XPATH, "//div[@id='upload-info']//yt-formatted-string[@id='owner-sub-count']")[
           0].text

   video_description = driver.find_elements(By.XPATH,                                  '//*[@id="description-inline-expander"]/yt-attributed-string/span/span')
   result = []
   for i in video_description:
       result.append(i.text)
   description = ''.join(result)

   publish_date = driver.find_elements(By.XPATH, '//*[@id="info"]/span')[2].text
   total_views = driver.find_elements(By.XPATH, '//*[@id="info"]/span')[0].text

   number_of_likes = driver.find_elements(By.XPATH,                                   '//*[@id="top-level-buttons-computed"]/segmented-like-dislike-button-view-model/yt-smartimation/div/div/like-button-view-model/toggle-button-view-model/button-view-model/button/div')[
       1].text

   comment_names = driver.find_elements(By.XPATH, '//*[@id="author-text"]/span')
   comment_content = driver.find_elements(By.XPATH, '//*[@id="content-text"]/span')
   comment_library = []

   for each in range(len(comment_names)):
       name = comment_names[each].text
       content = comment_content[each].text
       indie_comment = {
           'name': name,
           'comment': content
       }
       comment_library.append(indie_comment)

   data = {
       'owner': owner,
       'subscribers': total_number_of_subscribers,
       'video_title': video_title,
       'description': description,
       'date': publish_date,
       'views': total_views,
       'likes': number_of_likes,
       'comments': comment_library
   }

   return data

except Exception as err:
   print(f"Error: {err}")

Céim 4: Scríobh na sonraí a bailíodh le comhad JSON

def organize_write_data(data:dict):
    output = json.dumps(data, indent=2, ensure_ascii=False).encode("ascii", "ignore").decode("utf-8")
    try:
        with open("output.json", 'w', encoding='utf-8') as file:
            file.write(output)
    except Exception as err:
        print(f"Error encountered: {err}")

Tógann an fheidhm `organize_write_data ()` na “sonraí” a chuirtear ar ais mar ionchur agus eagraíonn sé é i struchtúr JSON formáidithe. Scríobhann sé ansin na sonraí eagraithe seo ar chomhad aschuir darb ainm "output.json" agus earráidí féideartha á láimhseáil le linn an phróisis scríbhneoireachta comhad.

Cód Iomlán

Go dtí seo, is é seo cód iomlán ár gclár scríobtha:

from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import json
import time

# Sonraigh an seoladh seachfhreastalaí le hainm úsáideora agus pasfhocal
proxy_address = ""
proxy_username = ""
proxy_password = ""

# Roghanna Chrome a chur ar bun leis an seachvótálaí agus an fíordheimhniú
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')

# Cruthaigh cás Webdriver le sreangán seiléiniam
driver = wiredriver.Chrome(options=chrome_options)

youtube_url_to_scrape = ""

# Déan do uathoibriú seiléiniam le cumais fheabhsaithe na seiléiniam-sreang
driver.get(youtube_url_to_scrape)


def extract_information() -> dict:
   try:
       element = WebDriverWait(driver, 15).until(
           EC.presence_of_element_located((By.XPATH, '//*[@id="expand"]'))
       )
       element.click()

       time.sleep(10)
       actions = ActionChains(driver)
       actions.send_keys(Keys.END).perform()
       time.sleep(10)
       actions.send_keys(Keys.END).perform()
       time.sleep(10)

       video_title = driver.find_elements(By.XPATH, '//*[@id="title"]/h1')[0].text

       owner = driver.find_elements(By.XPATH, '//*[@id="text"]/a')[0].text
       total_number_of_subscribers = \
           driver.find_elements(By.XPATH, "//div[@id='upload-info']//yt-formatted-string[@id='owner-sub-count']")[
               0].text

       video_description = driver.find_elements(By.XPATH,
                                                '//*[@id="description-inline-expander"]/yt-attributed-string/span/span')
       result = []
       for i in video_description:
           result.append(i.text)
       description = ''.join(result)

       publish_date = driver.find_elements(By.XPATH, '//*[@id="info"]/span')[2].text
       total_views = driver.find_elements(By.XPATH, '//*[@id="info"]/span')[0].text

       number_of_likes = driver.find_elements(By.XPATH,
                                              '//*[@id="top-level-buttons-computed"]/segmented-like-dislike-button-view-model/yt-smartimation/div/div/like-button-view-model/toggle-button-view-model/button-view-model/button/div')[
           1].text

       comment_names = driver.find_elements(By.XPATH, '//*[@id="author-text"]/span')
       comment_content = driver.find_elements(By.XPATH,
                                              '//*[@id="content-text"]/span')
       comment_library = []

       for each in range(len(comment_names)):
           name = comment_names[each].text
           content = comment_content[each].text
           indie_comment = {
               'name': name,
               'comment': content
           }
           comment_library.append(indie_comment)

       data = {
           'owner': owner,
           'subscribers': total_number_of_subscribers,
           'video_title': video_title,
           'description': description,
           'date': publish_date,
           'views': total_views,
           'likes': number_of_likes,
           'comments': comment_library
       }

       return data

   except Exception as err:
       print(f"Error: {err}")


# Sonraí a thaifeadadh do JSON
def organize_write_data(data: dict):
   output = json.dumps(data, indent=2, ensure_ascii=False).encode("ascii", "ignore").decode("utf-8")
   try:
       with open("output.json", 'w', encoding='utf-8') as file:
           file.write(output)
   except Exception as err:
       print(f"Error encountered: {err}")


organize_write_data(extract_information())
driver.quit()

Torthaí

Breathnaíonn an t -aschur mar seo:

Screenshot_1.png

Tá tairbhe mhór ag baint le saibhreas faisnéise YouTube go sábháilte nuair a bhíonn scripteanna dea-chumtha a úsáideann seachvótálaithe chun a chinntiú go gcloítear le polasaithe agus rialacháin ardán. Éascaíonn an cur chuige thuasluaite eastóscadh sonraí freagrach agus maolaíonn sé an baol go dtarlódh srianta féideartha a fhorchuireann an t -ardán.

Tuairimí:

0 tuairimí