ازگر اسکرپٹ کا استعمال کرتے ہوئے ٹویٹر ڈیٹا کو کھرچنے کا طریقہ

تبصرے: 0

ٹویٹر ڈیٹا کو کھرچنے کے لئے ازگر اسکرپٹ بنانا واقعی بصیرت کو جمع کرنے کے لئے مفید ہے ، جیسے صارف کے جائزے یا مخصوص عنوانات کے ارد گرد مباحثے ، جو مارکیٹنگ اور تحقیق میں بہت مدد کرسکتے ہیں۔ اس طرح کے اسکرپٹ کا استعمال کرتے ہوئے آٹومیشن جمع کرنے کے عمل کو ہموار کرتا ہے ، جس سے یہ تیز اور موثر ہوتا ہے۔

مرحلہ 1: تنصیبات اور درآمدات

اصل کوڈ لکھنا شروع کرنے سے پہلے آپ کو 2 پیکیجز انسٹال کرنا ضروری ہیں۔ ان پیکیجوں کو انسٹال کرنے کے لئے آپ کو ازگر پیکیجز (PIP) کے لئے ایک پیکیج مینیجر کی بھی ضرورت ہے۔ خوش قسمتی سے ، ایک بار جب آپ اپنی مشین پر ازگر انسٹال کریں گے تو ، PIP بھی انسٹال ہوجاتا ہے۔ ان پیکیجوں کو انسٹال کرنے کے ل you ، آپ کو صرف اپنے کمانڈ لائن انٹرفیس (سی ایل آئی) میں نیچے کمانڈ چلانے کی ضرورت ہے۔

pip install selenium-wire selenium undetected-chromedriver

ایک بار تنصیب مکمل ہونے کے بعد ، آپ کو ان پیکیجوں کو اپنی ازگر فائل میں درآمد کرنا ہوگا جیسا کہ ذیل میں دکھایا گیا ہے۔

from seleniumwire import webdriver as wiredriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
import json
import undetected_chromedriver as uc
import random
Import ssl
  • سیلینیم وائر: پراکسیوں کو براہ راست تشکیل دینے کی صلاحیت کو شامل کرکے سیلینیم کو بڑھاتا ہے ، کھرچنے والی سرگرمیوں کے دوران رکاوٹوں سے بچنے کے لئے انتہائی ضروری ہے۔
  • سیلینیم: عنصر کی تلاش کے لئے براؤزر کی کارروائیوں کی نقالی کرنے کے لئے ایکشنچینز اور "چابیاں" جیسے ٹولز کے ساتھ ڈیٹا سکریپنگ کی سہولت فراہم کرتا ہے ، "بذریعہ" عنصر کی تلاش ، "ویب ڈرایورویٹ" ، اور حالت پر مبنی عملدرآمد کے لئے "متوقع_کنڈیشنز"۔
  • غیر منقول کرومیڈریور: ویب سائٹوں پر بوٹ کا پتہ لگانے کے طریقہ کار کو روکنے کے لئے سیلینیم تار کے ساتھ استعمال کے لئے کرومیڈریور کو تبدیل کرتا ہے ، جو بلاک کرنے والے خطرات کو کم کرتا ہے۔
  • وقت ، بے ترتیب ، JSON: JSON فارمیٹ میں آپریشن ٹائمنگ اور ہینڈلنگ ڈیٹا کو سنبھالنے کے لئے معیاری ازگر لائبریریاں۔

مرحلہ 2: پراکسی ابتدا

یہ متعدد طور پر قائم کیا گیا ہے کہ سکریپنگ کے دوران پراکسی کا استعمال ضروری ہے۔ ٹویٹر سوشل میڈیا پلیٹ فارم میں سے ایک ہے جو ڈیٹا کو کھرچنے اور محفوظ رہنے اور پابندی سے بچنے کے لئے تیار ہوتا ہے ، آپ کو پراکسی استعمال کرنا چاہئے۔

آپ کو اپنا پراکسی ایڈریس ، پراکسی صارف نام اور پاس ورڈ فراہم کرنا ہے اور آپ کا آئی پی اب نقاب پوش اور محفوظ ہونا چاہئے۔ ہیڈ لیس براؤزر کو چلانے ، بنیادی طور پر وہی جیسے انٹرفیس کے بغیر براؤزر چلا رہا ہے ، کھرچنے کے عمل کو تیز کرنے میں مدد کرتا ہے ، اسی وجہ سے ہم نے اختیارات میں ہیڈ لیس پرچم شامل کیا۔

# پراکسی سرور ایڈریس کو صارف نام اور پاس ورڈ کے ساتھ پراکسیوں کی فہرست میں بتائیں
proxies = [
    "proxy_username:proxy_password@proxy_address:port_number",
]




# بے ترتیب پراکسی حاصل کرنے کے لئے فنکشن
def get_proxy():
    return random.choice(proxies)


# پراکسی اور توثیق کے ساتھ کروم کے اختیارات مرتب کریں
chrome_options = Options()
chrome_options.add_argument("--headless")


proxy = get_proxy()
proxy_options = {
    "proxy": {
        "http": f"http://{proxy}",
        "https": f"https://{proxy}",
    }
}

مرحلہ 3: X/ٹویٹر میں لاگ ان کرنے کا طریقہ

ازگر کا استعمال کرتے ہوئے ٹویٹر ڈیٹا کو مؤثر طریقے سے کھرچنے کے ل the ، اسکرپٹ کو ٹویٹر اکاؤنٹ کے لئے رسائی کی سندوں کی ضرورت ہوتی ہے ، بشمول صارف نام اور پاس ورڈ۔

مزید برآں ، آپ کو تلاش کی مطلوبہ الفاظ کی وضاحت کرنی ہوگی۔ اسکرپٹ میں کمانڈ استعمال کیا گیا ہے https://twitter.com/search?q={search_keyword}&src=typed_query&f=top ایک یو آر ایل کی تعمیر کے لئے جو ٹویٹر پر اس مطلوبہ الفاظ کی تلاش کے قابل بناتا ہے۔

اگلے مرحلے میں کرومیڈریور کی مثال بنانا شامل ہے ، جس میں پراکسی کی تفصیلات کو بطور اختیار شامل کرنا ہے۔ یہ سیٹ اپ کرومیڈریور کو ہدایت کرتا ہے کہ صفحے کو لوڈ کرتے وقت ایک مخصوص IP ایڈریس استعمال کریں۔ اس سیٹ اپ کے بعد ، سرچ یو آر ایل ان ترتیبوں سے بھری ہوئی ہے۔ ایک بار صفحہ بھری ہوئی ہے ، آپ کو تلاش کے نتائج تک رسائی حاصل کرنے کے لئے لاگ ان کرنا ہوگا۔ ویب ڈرایورویٹ کا استعمال کرتے ہوئے ، اسکرپٹ کی تصدیق ہوتی ہے کہ صارف نام کے اندراج کے علاقے کی موجودگی کی جانچ کرکے صفحہ مکمل طور پر بھری ہوئی ہے۔ اگر یہ علاقہ لوڈ کرنے میں ناکام رہتا ہے تو ، یہ مشورہ دیا جاتا ہے کہ کرومڈریور مثال کو ختم کریں۔

search_keyword = input("What topic on X/Twitter would you like to gather data on?\n").replace(' ', '%20')
constructed_url = f"https://twitter.com/search?q={search_keyword}&src=typed_query&f=top"


# اپنے X/ٹویٹر کا صارف نام اور پاس ورڈ یہاں فراہم کریں
x_username = "" 
x_password = ""


print(f'Opening {constructed_url} in Chrome...')


# بغیر پائے جانے والے کروم ڈرائیور کے ساتھ ویب ڈرایور مثال بنائیں
driver = uc.Chrome(options=chrome_options, seleniumwire_options=proxy_options)


driver.get(constructed_url)


try:
    element = WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.XPATH, "//div[@class='css-175oi2r r-1mmae3n r-1e084wir-13qz1uu']"))
    )
except Exception as err:
    print(f'WebDriver Wait Error: Most likely Network TimeOut: Details\n{err}')
    driver.quit()


#سائن ان کریں
if element:
    username_field = driver.find_element(By.XPATH, "//input[@class='r-30o5oe r-1dz5y72 r-13qz1uu r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-fdjqy7']")
    username_field.send_keys(x_username)
    username_field..send_keys(Keys.ENTER)


    password_field = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//input[@class='r-30o5oe r-1dz5y72 r-13qz1uu r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-fdjqy7']"))
    )
    password_field.send_keys(x_password)
    password_field.send_keys(Keys.ENTER)


    print("Sign In Successful...\n")


    sleep(10)

مرحلہ 4: اوپر کے نتائج نکالنا

لغت کی شکل میں تمام جیلی ہوئی ڈیٹا کو منظم طریقے سے اسٹور کرنے کے لئے ایک فہرست متغیر ، نتائج بنائیں۔ اس کے بعد ، ہر ٹویٹ کے لئے منظم طریقے سے ڈیٹا کی دولت جمع کرنے کے لئے کھرچنی () نامی ایک فنکشن قائم کریں ، جس میں ڈسپلے کا نام ، صارف نام ، پوسٹ مواد ، اور پسندیدگی جیسے نقوش جیسے اہم تفصیلات شامل ہیں۔

فہرستوں کی لمبائی میں یکسانیت کی ضمانت کے لئے ایک فعال نقطہ نظر اپنایا گیا ہے۔ منٹ () فنکشن اس بات کو یقینی بناتا ہے کہ ہر فہرست کی لمبائی دوسروں کے ساتھ منسلک ہوتی ہے۔ اس طریقہ کار پر عمل پیرا ہونے سے ، ہم ٹویٹر ڈیٹا کو جمع کرنے اور اس پر کارروائی کرنے کے لئے ہم آہنگی اور ساختی نقطہ نظر کو یقینی بناتے ہیں۔

جب ہم باطل نمبر/میٹرکس کو کھرچتے ہیں تو ، وہ نمبروں کی حیثیت سے نہیں ہوتے ہیں۔ اس کے بعد ، ہمیں کنورٹ_ٹو_نومرک () کا استعمال کرتے ہوئے نمبروں میں تاروں کو تبدیل کرنے کی ضرورت ہے تاکہ نتیجہ کو تاثرات کے ذریعہ ترتیب دیا جاسکے۔

results = []


# کھرچنی
def scrape():
   display_names = driver.find_elements(By.XPATH,
                                        '//*[@class="css-175oi2r r-1wbh5a2 r-dnmrzs r-1ny4l3l r-1awozwy r-18u37iz"]/div[1]/div/a/div/div[1]/span/span')
   usernames = driver.find_elements(By.XPATH,
                                    '//*[@class="css-175oi2r r-1wbh5a2 r-dnmrzs r-1ny4l3l r-1awozwy r-18u37iz"]/div[2]/div/div[1]/a/div/span')
   posts = driver.find_elements(By.XPATH,
                                '//*[@class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1udh08x r-bcqeeo r-1ttztb7 r-qvutc0 r-37j5jr r-a023e6 r-rjixqe r-16dba41 r-bnwqim"]/span')
   comments = driver.find_elements(By.XPATH,
                                   '//*[@class="css-175oi2r r-1kbdv8c r-18u37iz r-1wtj0ep r-1ye8kvj r-1s2bzr4"]/div[1]/button/div/div[2]/span/span/span')
   retweets = driver.find_elements(By.XPATH,
                                   '//*[@class="css-175oi2r r-1kbdv8c r-18u37iz r-1wtj0ep r-1ye8kvj r-1s2bzr4"]/div[2]/button/div/div[2]/span/span/span')
   likes = driver.find_elements(By.XPATH,
                                '//*[@class="css-175oi2r r-1kbdv8c r-18u37iz r-1wtj0ep r-1ye8kvj r-1s2bzr4"]/div[3]/button/div/div[2]/span/span/span')
   impressions = driver.find_elements(By.XPATH,
                                      '//*[@class="css-175oi2r r-1kbdv8c r-18u37iz r-1wtj0ep r-1ye8kvj r-1s2bzr4"]/div[4]/a/div/div[2]/span/span/span')

   min_length = min(len(display_names), len(usernames), len(posts), len(comments), len(retweets), len(likes),
                    len(impressions))

   for each in range(min_length):
       results.append({
           'Username': usernames[each].text,
           'displayName': display_names[each].text,
           'Post': posts[each].text.rstrip("Show more"),
           'Comments': 0 if comments[each].text == "" else convert_to_numeric(comments[each].text),
           'Retweets': 0 if retweets[each].text == "" else convert_to_numeric(retweets[each].text),
           'Likes': 0 if likes[each].text == "" else convert_to_numeric(likes[each].text),
           'Impressions': 0 if impressions[each].text == "" else convert_to_numeric(impressions[each].text)
       })


def reorder_json_by_impressions(json_data):
   # نزول ترتیب میں 'تاثرات' پر مبنی JSON لسٹ کو جگہ جگہ ترتیب دیں
   json_data.sort(key=lambda x: int(x['Impressions']), reverse=True)


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


def convert_to_numeric(value):
   multipliers = {'K': 10 ** 3, 'M': 10 ** 6, 'B': 10 ** 9}

   try:
       if value[-1] in multipliers:
           return int(float(value[:-1]) * multipliers[value[-1]])
       else:
           return int(value)
   except ValueError:
      # اس معاملے کو سنبھالیں جہاں تبادلوں میں ناکام ہوجاتا ہے
       return None

مرحلہ 5: ڈیٹا کو منظم کرنا

اعداد و شمار کو بہتر طریقے سے منظم کرنے کے ل we ، ہم نے ایک فنکشن تشکیل دیا جو نتائج لیتا ہے اور ہر ٹویٹ کے ذریعہ جمع ہونے والے تاثرات کی تعداد کا استعمال کرتے ہوئے نزولی ترتیب میں ٹویٹس کو ترتیب دیتا ہے۔ منطقی طور پر ، ہم دوسروں سے پہلے سب سے زیادہ وینٹی نمبر کے ساتھ ٹویٹ دیکھنا چاہتے ہیں۔

def reorder_json_by_impressions(json_data):
    # نزول ترتیب میں 'تاثرات' پر مبنی JSON لسٹ کو جگہ جگہ ترتیب دیں
    json_data.sort(key=lambda x:int(x['Impressions']), reverse=True)

JSON فائل کو لکھیں

جمع کردہ تمام ڈیٹا کو تصور کرنے کا ایک JSON فائل بہترین طریقہ ہے۔ JSON فائل کو لکھنا بالکل ایسا ہی ہے جیسے ازگر میں کسی بھی دوسری فائل کو لکھنا۔ فرق صرف اتنا ہے کہ فائل کو لکھنے سے پہلے ہمیں JSON ماڈیول کی ضرورت ہے۔

اگر کوڈ صحیح طریقے سے چل رہا ہے تو ، آپ کو فائل ڈھانچے میں ایک نتیجہ۔ 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("result.json", 'w', encoding='utf-8') as file:
            file.write(output)
    except Exception as err:
        print(f"Error encountered: {err}") 

صفحہ بندی

کوڈ پر عمل درآمد شروع کرنے کے لئے ، ہمیں ڈیٹا سکریپنگ شروع کرنے کے لئے اپنے افعال کو ترتیب سے کال کرنے کی ضرورت ہے۔ ہم سیلینیم کے اندر ایکشنچینز ماڈیول کا استعمال کرتے ہوئے ایک حوالہ تیار کرتے ہیں تاکہ سیلینیم کے مختلف اقدامات کو آسان بنایا جاسکے۔ یہ ماڈیول صفحہ پر نیچے سکرولنگ کی نقالی کرنے کے لئے اہم ثابت ہوتا ہے۔

پہلے دور میں موجودہ بھری ہوئی صفحے سے ڈیٹا کو کھرچنا شامل ہے۔ اس کے بعد ، ایک لوپ شروع کیا جاتا ہے ، جس میں پانچ بار تکرار ہوتا ہے ، اس دوران صفحے کو نیچے سکرول کیا جاتا ہے ، اس کے بعد اگلے سکریپنگ تکرار سے پہلے پانچ سیکنڈ کا وقفہ ہوتا ہے۔

صارفین لوپ کی حد کو ایڈجسٹ کرسکتے ہیں ، یا تو بڑھتی یا کم کرنے کے ل data ڈیٹا کو ختم کرنے کے ل. اس میں اضافہ کرسکتے ہیں۔ یہ نوٹ کرنا بہت ضروری ہے کہ اگر ظاہر کرنے کے لئے کوئی اضافی مواد موجود نہیں ہے تو ، اسکرپٹ مستقل طور پر ایک ہی ڈیٹا کو کھرچ ڈالے گا ، جس کے نتیجے میں فالتو پن پیدا ہوگا۔ اس کو روکنے کے لئے ، بے کار ڈیٹا ریکارڈنگ سے بچنے کے ل lo لوپ رینج کو اسی کے مطابق ایڈجسٹ کریں۔

actions = ActionChains(driver)
for i in range(5):
    actions.send_keys(Keys.END).perform()
    sleep(5)
    scrape()


reorder_json_by_impressions(results)
organize_write_data(results)


print(f"Scraping Information on {search_keyword} is done.")


driver.quit()

مکمل کوڈ

from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
import json
import undetected_chromedriver as uc
import random
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context


search_keyword = input("What topic on X/Twitter would you like to gather data on?\n").replace(' ', '%20')
constructed_url = f"https://twitter.com/search?q={search_keyword}&src=typed_query&f=top"

# اپنے X/ٹویٹر کا صارف نام اور پاس ورڈ یہاں فراہم کریں
x_username = ""
x_password = ""

print(f'Opening {constructed_url} in Chrome...')

# پراکسی سرور ایڈریس کو صارف نام اور پاس ورڈ کے ساتھ پراکسیوں کی فہرست میں بتائیں
proxies = [
   "USERNAME:PASSWORD@IP:PORT",
]


# بے ترتیب پراکسی حاصل کرنے کے لئے فنکشن
def get_proxy():
   return random.choice(proxies)


# پراکسی اور توثیق کے ساتھ کروم کے اختیارات مرتب کریں
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--ignore-ssl-errors')

proxy = get_proxy()
proxy_options = {
   "proxy": {
       "http": f"http://{proxy}",
       "https": f"https://{proxy}",
   }
}

# بغیر پائے جانے والے کروم ڈرائیور کے ساتھ ویب ڈرایور مثال بنائیں
driver = uc.Chrome(options=chrome_options, seleniumwire_options=proxy_options)

driver.get(constructed_url)

try:
   element = WebDriverWait(driver, 20).until(
       EC.presence_of_element_located((By.XPATH, "//div[@class='css-175oi2r r-1mmae3n r-1e084wi r-13qz1uu']"))
   )
except Exception as err:
   print(f'WebDriver Wait Error: Most likely Network TimeOut: Details\n{err}')
   driver.quit()

# سائن ان کریں
if element:
   username_field = driver.find_element(By.XPATH,
                                        "//input[@class='r-30o5oe r-1dz5y72 r-13qz1uu r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-fdjqy7']")
   username_field.send_keys(x_username)
   username_field.send_keys(Keys.ENTER)

   password_field = WebDriverWait(driver, 10).until(
       EC.presence_of_element_located((By.XPATH,
                                       "//input[@class='r-30o5oe r-1dz5y72 r-13qz1uu r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-fdjqy7']"))
   )
   password_field.send_keys(x_password)
   password_field.send_keys(Keys.ENTER)

   print("Sign In Successful...\n")

   sleep(10)

results = []


# کھرچنی
def scrape():
   display_names = driver.find_elements(By.XPATH,
                                        '//*[@class="css-175oi2r r-1wbh5a2 r-dnmrzs r-1ny4l3l r-1awozwy r-18u37iz"]/div[1]/div/a/div/div[1]/span/span')
   usernames = driver.find_elements(By.XPATH,
                                    '//*[@class="css-175oi2r r-1wbh5a2 r-dnmrzs r-1ny4l3l r-1awozwy r-18u37iz"]/div[2]/div/div[1]/a/div/span')
   posts = driver.find_elements(By.XPATH,
                                '//*[@class="css-146c3p1 r-8akbws r-krxsd3 r-dnmrzs r-1udh08x r-bcqeeo r-1ttztb7 r-qvutc0 r-37j5jr r-a023e6 r-rjixqe r-16dba41 r-bnwqim"]/span')
   comments = driver.find_elements(By.XPATH,
                                   '//*[@class="css-175oi2r r-1kbdv8c r-18u37iz r-1wtj0ep r-1ye8kvj r-1s2bzr4"]/div[1]/button/div/div[2]/span/span/span')
   retweets = driver.find_elements(By.XPATH,
                                   '//*[@class="css-175oi2r r-1kbdv8c r-18u37iz r-1wtj0ep r-1ye8kvj r-1s2bzr4"]/div[2]/button/div/div[2]/span/span/span')
   likes = driver.find_elements(By.XPATH,
                                '//*[@class="css-175oi2r r-1kbdv8c r-18u37iz r-1wtj0ep r-1ye8kvj r-1s2bzr4"]/div[3]/button/div/div[2]/span/span/span')
   impressions = driver.find_elements(By.XPATH,
                                      '//*[@class="css-175oi2r r-1kbdv8c r-18u37iz r-1wtj0ep r-1ye8kvj r-1s2bzr4"]/div[4]/a/div/div[2]/span/span/span')

   min_length = min(len(display_names), len(usernames), len(posts), len(comments), len(retweets), len(likes),
                    len(impressions))

   for each in range(min_length):
       results.append({
           'Username': usernames[each].text,
           'displayName': display_names[each].text,
           'Post': posts[each].text.rstrip("Show more"),
           'Comments': 0 if comments[each].text == "" else convert_to_numeric(comments[each].text),
           'Retweets': 0 if retweets[each].text == "" else convert_to_numeric(retweets[each].text),
           'Likes': 0 if likes[each].text == "" else convert_to_numeric(likes[each].text),
           'Impressions': 0 if impressions[each].text == "" else convert_to_numeric(impressions[each].text)
       })


def reorder_json_by_impressions(json_data):
   # نزول ترتیب میں 'تاثرات' پر مبنی JSON لسٹ کو جگہ جگہ ترتیب دیں
   json_data.sort(key=lambda x: int(x['Impressions']), reverse=True)


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


def convert_to_numeric(value):
   multipliers = {'K': 10 ** 3, 'M': 10 ** 6, 'B': 10 ** 9}

   try:
       if value[-1] in multipliers:
           return int(float(value[:-1]) * multipliers[value[-1]])
       else:
           return int(value)
   except ValueError:
       # اس معاملے کو سنبھالیں جہاں تبادلوں میں ناکام ہوجاتا ہے
       return None


actions = ActionChains(driver)
for i in range(5):
   actions.send_keys(Keys.END).perform()
   sleep(5)
   scrape()

reorder_json_by_impressions(results)
organize_write_data(results)

print(f"Scraping Information on {search_keyword} is done.")

driver.quit()

حتمی نتائج

سکریپنگ کے بعد JSON فائل کو پسند کرنا چاہئے:

[
  {
    "Username": "@LindaEvelyn_N",
    "displayName": "Linda Evelyn Namulindwa",
    "Post": "Still getting used to Ugandan local foods so I had Glovo deliver me a KFC Streetwise Spicy rice meal (2 pcs of chicken & jollof rice at Ugx 18,000)\n\nNot only was it fast but it also accepts all payment methods.\n\n#GlovoDeliversKFC\n#ItsFingerLinkingGood",
    "Comments": 105,
    "Retweets": 148,
    "Likes": 1500,
    "Impressions": 66000
  },
  {
    "Username": "@GymCheff",
    "displayName": "The Gym Chef",
    "Post": "Delicious High Protein KFC Zinger Rice Box!",
    "Comments": 1,
    "Retweets": 68,
    "Likes": 363,
    "Impressions": 49000
  }
]

گائیڈ کا بیان کردہ دلچسپی کے مختلف موضوعات پر اعداد و شمار کو کھرچنے کے لئے استعمال کیا جاسکتا ہے ، عوامی جذبات کے تجزیے ، رجحان سے باخبر رہنے ، نگرانی اور ساکھ کے انتظام میں مطالعات کی سہولت فراہم کرتا ہے۔ ازگر ، اس کے نتیجے میں ، خود کار طریقے سے ڈیٹا اکٹھا کرنے کے عمل کو اس کے وسیع پیمانے پر بلٹ ان ماڈیولز اور افعال کے ساتھ آسان بناتا ہے۔ یہ ٹولز پراکسیوں کی تشکیل ، صفحہ سکرولنگ کا انتظام کرنے ، اور جمع کردہ معلومات کو مؤثر طریقے سے منظم کرنے کے لئے ضروری ہیں۔

تبصرے:

0 تبصرے