হ্যালো.
প্রথমবারের মতো ক্রলিং অধ্যয়ন করার সময় আমি বিভিন্ন জিনিস চেষ্টা করছি।
এই সময়, আমি এটি ইন্সটাগ্রামে প্রয়োগ করতে চাই, সম্প্রতি সবচেয়ে জনপ্রিয় এসএনএসগুলির মধ্যে একটি।
এটি আকর্ষণীয় করার জন্য, আমি মানব মনোবিজ্ঞানের কিছুটা ব্যবহার করে নিম্নলিখিতগুলি করার চেষ্টা করছি।
এটা কেমন? আপনি চেষ্টা করতে চান না? 🙂
কখনও কখনও লোকেরা আমাকে অনুসরণ করা বন্ধ করে দেয়। টিটি
এখন, এর ধাপে ধাপে করা যাক.
প্রয়োজনীয় মডিউল আমদানি করুন
import time
import sys
from selenium import webdriver
from bs4 import BeautifulSoup
সেলেনিয়াম প্যাকেজের ওয়েবড্রাইভার মডিউলটি একটি ওয়েব ব্রাউজার চালু করে এবং আপনাকে স্ক্রিপ্ট কমান্ড অনুযায়ী ক্রিয়া সম্পাদন করতে দেয় এবং bs4 প্যাকেজের BeautifulSoup মডিউলটিতে একটি ফাংশন রয়েছে যা আপনাকে HTML DOM ডেটা থেকে সহজেই পছন্দসই বিষয়বস্তু বের করতে দেয়।
সেলেনিয়াম এবং bs4 প্যাকেজ বিদ্যমান না থাকলে, কমান্ড উইন্ডোতে নিম্নলিখিতটি প্রবেশ করে সেগুলি ইনস্টল করুন।
pip install bs4
pip install selenium
আর Chrome webdriver নিচের লিঙ্ক থেকে ডাউনলোড করা যাবে।
https://sites.google.com/a/chromium.org/chromedriver/downloads
বাকিগুলি মৌলিক মডিউল, তাই আপনি এখনই আমদানি করতে এবং ব্যবহার করতে পারেন।
ইনস্টাগ্রামে লগ ইন করুন
এখন ক্রোম ব্রাউজার খুলুন এবং ইনস্টাগ্রাম ঠিকানা অ্যাক্সেস করে লগ ইন করার চেষ্টা করুন।
কমান্ড উইন্ডো থেকে সরাসরি ইনপুট নেওয়া যাক।
উদাহরণস্বরূপ, ধরুন আপনি কমান্ড উইন্ডোতে নিম্নলিখিতটি টাইপ করেছেন।
python crawling_instagram.py sangminem 123456
যেখানে sys.argv[0] হয়ে যায় crawling_instagram.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 পেতে পারেন, যা আপনি Chrome-এ F12 চাপলে প্রদর্শিত হবে এবং Copy > Copy xpath নির্বাচন করে।
পরবর্তী লগইন করার জন্য 5 সেকেন্ড অপেক্ষা করুন।
এই কোডটি আমি পরে আবার xpath ব্যবহার করে Do বাটনে ক্লিক করার জন্য লিখেছিলাম।
যেহেতু এই অংশটি কেবল এড়িয়ে যাওয়ার জন্য, একটি বিস্তারিত ব্যাখ্যা বাদ দেওয়া হবে।
অনুসরণকারীদের তালিকা পান
এখন লগইন সম্পূর্ণ হয়েছে, আসুন ফলোয়ারের সংখ্যা পেতে যুক্তি প্রয়োগ করি।
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 মেথড আর্গুমেন্টের মান, ডেভেলপার মোড এলিমেন্ট ট্যাব থেকে সরাসরি দেখা এবং আমদানি করা মান।
লোড করার পর, BeautifulSoup মডিউলের মাধ্যমে html ডেটা আমদানি করুন, ব্যবহারকারীর নাম সহ ট্যাগ এবং ক্লাস চেক করুন, সেগুলিকে বের করুন এবং একটি অ্যারেতে রাখুন।
আমি মুদ্রণ পদ্ধতির সাথে অ্যারের দৈর্ঘ্য পেয়েছি এবং স্ক্রিনে অনুসরণকারীদের সংখ্যা প্রিন্ট করেছি।
আপনার নিম্নলিখিত তালিকা পান
এর পরে, আসুন অনুসরণকারীর সংখ্যা পান।
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 ট্যাগ কাঠামোটি বের করতে হতে পারে।