Рубрики
कोडन

क्या Instagram F4F (फॉलो) स्थिति को स्वचालित रूप से जांचना संभव है?

हैलो।

मैं पहली बार रेंगने का अध्ययन करते हुए विभिन्न चीजों को भी आजमा रहा हूं।

इस बार, मैं इसे हाल ही में सबसे लोकप्रिय SNS में से एक, Instagram पर लागू करना चाहूंगा।

इसे दिलचस्प बनाने के लिए, मैं मानव मनोविज्ञान के एक छोटे से उपयोग का उपयोग करके निम्नलिखित करने का प्रयास कर रहा हूं।

इसके बारे में क्या ख़्याल है? क्या आप कोशिश नहीं करना चाहते मैं

कभी-कभी लोग मेरा पीछा करना बंद कर देते हैं। टीटी

अब, इसे चरण दर चरण करते हैं।

आवश्यक मॉड्यूल आयात करें

import time
import sys
from selenium import webdriver
from bs4 import BeautifulSoup

सेलेनियम पैकेज का वेबड्राइवर मॉड्यूल एक वेब ब्राउज़र लॉन्च करता है और आपको स्क्रिप्ट कमांड के अनुसार कार्रवाई करने की अनुमति देता है, और bs4 पैकेज में सुंदर सूप मॉड्यूल में एक फ़ंक्शन होता है जो आपको HTML DOM डेटा से वांछित सामग्री को आसानी से निकालने की अनुमति देता है।

यदि सेलेनियम और bs4 पैकेज मौजूद नहीं हैं, तो उन्हें कमांड विंडो में निम्नलिखित दर्ज करके स्थापित करें।

pip install bs4
pip install selenium

और क्रोम वेबड्राइवर को नीचे दिए गए लिंक से डाउनलोड किया जा सकता है।

https://sites.google.com/a/chromium.org/chromedriver/downloads

बाकी बुनियादी मॉड्यूल हैं, इसलिए आप उन्हें तुरंत आयात और उपयोग कर सकते हैं।

इंस्टाग्राम में लॉग इन करें

अब क्रोम ब्राउजर खोलें और इंस्टाग्राम एड्रेस पर पहुंचकर लॉग इन करने का प्रयास करें।

आइए सीधे कमांड विंडो से इनपुट लें।

उदाहरण के लिए, मान लें कि आप कमांड विंडो में निम्न टाइप करते हैं।

python crawling_instagram.py sangminem 123456

जहां sys.argv[0] क्रॉलिंग_इंस्टाग्राम.py बन जाता है, sys.argv[1] sangminem बन जाता है और sys.argv[2] 123456 बन जाता है।

आइए इसे नीचे दिखाए अनुसार Instagram में लॉग इन करने के लिए कोड लिखने के लिए उपयोग करें।

browser = webdriver.Chrome('./chromedriver')
browser.get('https://www.instagram.com/'+sys.argv[1])
browser.execute_script("document.querySelectorAll('.-nal3')[1].click();")
time.sleep(2)
browser.find_element_by_name('username').send_keys(sys.argv[1])
browser.find_element_by_name('password').send_keys(sys.argv[2])
browser.find_element_by_xpath('//*[@id="loginForm"]/div[1]/div[3]/button').submit()
time.sleep(5)
browser.find_element_by_xpath('//*[@id="react-root"]/section/main/div/div/div/div/button').click()

मैंने क्रोमेड्राइवर का उपयोग करके क्रोम वेब ब्राउज़र खोला और इंस्टाग्राम एड्रेस और यूजर नेम को मिलाकर कनेक्ट किया।

मैंने लॉगिन विंडो खोलने के लिए browser.execute_script का उपयोग करके फॉलोअर बटन पर क्लिक किया।

(यदि आप लॉग इन नहीं होने पर क्लिक करते हैं, तो लॉगिन विंडो प्रदर्शित होती है।)

उसके बाद, लोडिंग लंबी होने की स्थिति में मैं 2 सेकंड प्रतीक्षा करता हूं।

अगला, इनपुट प्रकार उपयोगकर्ता नाम और पासवर्ड भागों को ढूंढता है, और उपयोगकर्ता नाम और पासवर्ड इनपुट करने के लिए send_keys विधि का उपयोग किया जाता है।

और मुझे xpath के साथ फॉर्म में लॉगिन बटन मिला और सबमिट विधि कहा गया।

आप डेवलपर के तत्व टैब में उस तत्व पर राइट-क्लिक करके xpath प्राप्त कर सकते हैं, जो क्रोम में F12 दबाने पर दिखाई देता है, और कॉपी > कॉपी xpath का चयन करता है।

अगले लॉगिन के लिए 5 सेकंड प्रतीक्षा करें।

यह वह कोड है जिसे मैंने बाद में xpath का उपयोग करके फिर से करें बटन पर क्लिक करने के लिए लिखा था।

चूंकि इस भाग को केवल छोड़ दिया जाना है, एक विस्तृत विवरण छोड़ दिया जाएगा।

अनुयायी सूची प्राप्त करें

अब जब लॉगिन पूरा हो गया है, तो अनुयायियों की संख्या प्राप्त करने के लिए तर्क को लागू करें।

time.sleep(2)
browser.execute_script("document.querySelectorAll('.-nal3')[1].click();")
time.sleep(1)
oldHeight = -1
newHeight = -2
while oldHeight != newHeight:
    oldHeight = newHeight
    newHeight = browser.execute_script("return document.querySelectorAll('._aano')[0].scrollHeight")
    browser.execute_script("document.querySelectorAll('.isgrP')[0].scrollTo(0,document.querySelectorAll('._aano')[0].scrollHeight)")
    time.sleep(0.5)
soup = BeautifulSoup(browser.page_source, 'html.parser')
followers = soup.findAll('a',['FPmhX','notranslate','_0imsa'])
followers_text = []
for follower in followers:
    followers_text.append(follower.get_text())
print("Number of followers: " + str(len(followers_text)))

खराबी को रोकने के लिए 2 सेकंड फिर से प्रतीक्षा करने के बाद, मैंने फिर से अनुयायी बार्टन पर क्लिक किया।

और यह वह हिस्सा है जो 1 सेकंड के लिए प्रतीक्षा करता है और अनुयायी उपयोगकर्ता नाम बयाना में प्राप्त करता है।

चूंकि हमें पहले सभी अनुयायियों को प्राप्त करने की आवश्यकता है, इसलिए हमने समय कथन के माध्यम से सभी को लोड करने के लिए स्क्रॉल को बार-बार कम करने के लिए तर्क लागू किया।

यदि पुरानी स्क्रॉल ऊंचाई और नई स्क्रॉल ऊंचाई अलग हैं, तो इसका मतलब है कि लोड करने के लिए और भी कुछ है, इसलिए यह एक वाक्यविन्यास है जो पुरानी स्क्रॉल ऊंचाई तक दोहराता रहता है और नई स्क्रॉल ऊंचाई समान होती है।

वर्ग का नाम, जो querySelectorAll विधि तर्क का मान है, वह मान है जिसे सीधे डेवलपर मोड तत्व टैब से देखा और आयात किया जाता है।

लोड करने के बाद, सुंदर सूप मॉड्यूल के माध्यम से एचटीएमएल डेटा आयात करें, उपयोगकर्ता नामों के साथ टैग और कक्षाओं की जांच करें, उन सभी को निकालें और उन्हें एक सरणी में रखें।

मुझे प्रिंट विधि के साथ सरणी की लंबाई मिली और स्क्रीन पर अनुयायियों की संख्या मुद्रित की।

अपनी निम्नलिखित सूची प्राप्त करें

अगला, आइए अनुयायियों की संख्या प्राप्त करें।

browser.find_element_by_xpath('/html/body/div[4]/div/div/div[1]/div/div[2]/button').click()
time.sleep(0.5)
browser.execute_script("document.querySelectorAll('.-nal3')[2].click();")
time.sleep(1)
oldHeight = -1
newHeight = -2
while oldHeight != newHeight:
    oldHeight = newHeight
    newHeight = browser.execute_script("return document.querySelectorAll('._aano')[0].scrollHeight")
    browser.execute_script("document.querySelectorAll('.isgrP')[0].scrollTo(0,document.querySelectorAll('._aano')[0].scrollHeight)")
    time.sleep(0.5)
soup = BeautifulSoup(browser.page_source, 'html.parser')
followings = soup.findAll('a',['FPmhX','notranslate','_0imsa'])
followings_text = []
for following in followings:
    followings_text.append(following.get_text())
print("Number of followings: " + str(len(followings_text)))

अनुयायी विंडो को बंद करने के लिए xpath का उपयोग करके बंद करें बटन पर क्लिक करें।

फिर मैंने आधा सेकंड इंतजार किया और निम्न बटन पर क्लिक किया।

और फिर मैंने 1 सेकंड के लिए फिर से इंतजार किया और मुझे वह उपयोगकर्ता नाम मिला जिसका मैं अनुसरण कर रहा था।

अनुयायी उपयोगकर्ता नाम प्राप्त करने का पैटर्न लगभग समान है, इसलिए मैं इसमें फिर से नहीं जाऊंगा।

केवल उन लोगों को प्राप्त करें जिनका आप अनुसरण करते हैं

अंत में, गैर-अनुयायियों को खोजने के लिए निम्नलिखित उपयोगकर्ता नामों की सूची के साथ अनुयायी उपयोगकर्ता नामों की सूची की तुलना करें।

result = []
for following in followings_text:
    cnt = 0
    for follower in followers_text:
        if following == follower:
            cnt += 1
            break
    if cnt == 0:
        result.append(following)
print('List of people who did not F4F: '+str(result))

निम्नलिखित उपयोगकर्ता नाम के आधार पर, हमने एक-एक करके सभी अनुयायी उपयोगकर्ता नामों की सूची की जाँच की, अगर वहाँ था तो गिना गया, और बार-बार बाहर निकलने के लिए तर्क का प्रदर्शन किया।

यदि गिनती 0 है, तो इसका मतलब है कि मैं अनुसरण कर रहा हूं, लेकिन अनुयायी सूची में नहीं, इसलिए मैंने इसे F4F नहीं किया और इसे परिणाम सरणी में जोड़ा।

अंत में, परिणामी सरणी को आउटपुट करने से वांछित उद्देश्य प्राप्त होता है।

ऐसे ही।

मैंने पीछा किया लेकिन तुमने नहीं किया? मैं

संदर्भ के लिए, मैं केवल अपने परिचितों का अनुसरण करता हूं, इसलिए ऐसे बहुत से लोग नहीं हैं जो मेरा अनुसरण नहीं करते हैं।

इसने बस अपने उद्देश्य की पूर्ति की।

पूर्ण स्रोत साझा करना

किसी को चाहिए तो शेयर करें।

import time
import sys
from selenium import webdriver
from bs4 import BeautifulSoup
username = sys.argv[1]
browser = webdriver.Chrome('./chromedriver')
browser.get('https://www.instagram.com/'+username)
browser.execute_script("document.querySelectorAll('.-nal3')[1].click();")
time.sleep(2)
browser.find_element_by_name('username').send_keys(sys.argv[1])
browser.find_element_by_name('password').send_keys(sys.argv[2])
browser.find_element_by_xpath('//*[@id="loginForm"]/div[1]/div[3]/button').submit()
time.sleep(5)
browser.find_element_by_xpath('//*[@id="react-root"]/section/main/div/div/div/div/button').click()
time.sleep(5)
if len(sys.argv) > 3:
    username = sys.argv[3]
print('Account: ' + username)
browser.get('https://www.instagram.com/'+username)
time.sleep(2)
browser.execute_script("document.querySelectorAll('.-nal3')[1].click();")
time.sleep(1)
oldHeight = -1
newHeight = -2
while oldHeight != newHeight:
    oldHeight = newHeight
    newHeight = browser.execute_script("return document.querySelectorAll('.jSC57')[0].scrollHeight")
    browser.execute_script("document.querySelectorAll('.isgrP')[0].scrollTo(0,document.querySelectorAll('.jSC57')[0].scrollHeight)")
    time.sleep(0.5)
soup = BeautifulSoup(browser.page_source, 'html.parser')
followers = soup.findAll('a',['FPmhX','notranslate','_0imsa'])
followers_text = []
for follower in followers:
    followers_text.append(follower.get_text())
print("Number of followers: " + str(len(followers_text)))
browser.find_element_by_xpath('/html/body/div[4]/div/div/div[1]/div/div[2]/button').click()
time.sleep(0.5)
browser.execute_script("document.querySelectorAll('.-nal3')[2].click();")
time.sleep(1)
oldHeight = -1
newHeight = -2
while oldHeight != newHeight:
    oldHeight = newHeight
    newHeight = browser.execute_script("return document.querySelectorAll('._aano')[0].scrollHeight")
    browser.execute_script("document.querySelectorAll('.isgrP')[0].scrollTo(0,document.querySelectorAll('._aano')[0].scrollHeight)")
    time.sleep(0.5)
soup = BeautifulSoup(browser.page_source, 'html.parser')
followings = soup.findAll('a',['FPmhX','notranslate','_0imsa'])
followings_text = []
for following in followings:
    followings_text.append(following.get_text())
print("Number of followings: " + str(len(followings_text)))
result = []
for following in followings_text:
    cnt = 0
    for follower in followers_text:
        if following == follower:
            cnt += 1
            break
    if cnt == 0:
        result.append(following)
print('List of people who did not F4F: '+str(result))

मिलते हैं अगली बार किसी और विषय के साथ। मैं

(सावधानी) कक्षा का नाम समय-समय पर बदला जा सकता है, इसलिए यदि प्रोग्राम काम नहीं करता है, तो आपको इसे ठीक करने के लिए Instagram टैग संरचना को स्वयं समझना होगा।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *

hi_INहिन्दी