Kategori
pengkodean

Apakah mungkin untuk secara otomatis memeriksa status Instagram F4F (ikuti)?

halo.

Saya juga mencoba berbagai hal saat belajar merangkak untuk pertama kalinya.

Kali ini, saya ingin menerapkannya ke Instagram, salah satu SNS paling populer belakangan ini.

Untuk membuatnya menarik, saya mencoba melakukan hal berikut dengan menggunakan sedikit psikologi manusia.

bagaimana dengan itu? tidakkah kamu ingin mencoba?

Terkadang orang berhenti mengikuti saya. TT

Sekarang, mari kita lakukan langkah demi langkah.

Impor modul yang diperlukan

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

Modul webdriver dari paket selenium meluncurkan browser web dan memungkinkan Anda untuk melakukan tindakan sesuai dengan perintah skrip, dan modul BeautifulSoup dalam paket bs4 memiliki fungsi yang memungkinkan Anda mengekstrak konten yang diinginkan dari data HTML DOM dengan mudah.

Jika paket selenium dan bs4 tidak ada, instal dengan memasukkan yang berikut ini di jendela perintah.

pip install bs4
pip install selenium

Dan webdriver Chrome dapat diunduh dari tautan di bawah ini.

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

Sisanya adalah modul dasar, sehingga Anda dapat mengimpor dan menggunakannya segera.

masuk ke Instagram

Sekarang buka browser Chrome dan coba masuk dengan mengakses alamat Instagram.

Mari kita ambil input langsung dari jendela perintah.

Misalnya, Anda mengetik berikut ini ke dalam jendela perintah.

python crawling_instagram.py sangminem 123456

di mana sys.argv[0] menjadi crawling_instagram.py , sys.argv[1] menjadi sangminem dan sys.argv[2] menjadi 123456 .

Mari kita gunakan ini untuk menulis kode untuk masuk ke Instagram seperti yang ditunjukkan di bawah ini.

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()

Saya membuka web browser Chrome menggunakan chromedriver dan terhubung dengan menggabungkan alamat Instagram dan nama pengguna.

Saya mengklik tombol pengikut menggunakan browser.execute_script untuk membuka jendela login.

(Jika Anda mengklik saat Anda tidak masuk, jendela masuk akan ditampilkan.)

Setelah itu, saya menunggu 2 detik jika pemuatannya akan lebih lama.

Selanjutnya, tipe input menemukan bagian nama pengguna dan kata sandi, dan metode send_keys digunakan untuk memasukkan nama pengguna dan kata sandi.

Dan saya menemukan tombol masuk dalam formulir dengan xpath dan memanggil metode kirim.

Anda bisa mendapatkan xpath dengan mengklik kanan pada elemen yang ingin Anda temukan di tab Elemen pengembang, yang muncul saat Anda menekan F12 di Chrome, dan memilih Salin > Salin xpath.

Tunggu 5 detik untuk login berikutnya.

Ini adalah kode yang saya tulis untuk mengklik tombol Do nanti menggunakan xpath lagi.

Karena bagian ini hanya akan dilewati, penjelasan rinci akan dihilangkan.

Dapatkan daftar pengikut

Sekarang setelah login selesai, mari kita terapkan logika untuk mendapatkan jumlah pengikut.

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)))

Setelah menunggu 2 detik lagi untuk mencegah kerusakan, saya mengklik barton pengikut lagi.

Dan inilah bagian yang menunggu selama 1 detik dan mendapatkan username follower dengan sungguh-sungguh.

Karena kami harus mendapatkan semua pengikut terlebih dahulu, kami menerapkan logika untuk menurunkan gulir berulang kali untuk memuat semua orang melalui pernyataan while.

Jika tinggi gulir lama dan tinggi gulir baru berbeda, berarti ada lebih banyak untuk memuat, jadi ini adalah sintaks yang terus berulang hingga tinggi gulir lama dan tinggi gulir baru sama.

Nama kelas, yang merupakan nilai argumen metode querySelectorAll, adalah nilai yang langsung dilihat dan diimpor dari tab Elemen Mode Pengembang.

Setelah memuat, impor data html melalui modul BeautifulSoup, periksa tag dan kelas dengan nama pengguna, ekstrak semuanya dan masukkan ke dalam array.

Saya mendapatkan panjang array dengan metode cetak dan mencetak jumlah pengikut di layar.

Dapatkan daftar berikut Anda

Selanjutnya, mari kita dapatkan jumlah pengikut.

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)))

Klik tombol tutup menggunakan xpath untuk menutup jendela pengikut.

Kemudian saya menunggu setengah detik dan mengklik tombol berikut.

Dan kemudian saya menunggu 1 detik lagi dan mendapatkan nama pengguna yang saya ikuti.

Pola untuk mendapatkan nama pengguna pengikut hampir serupa, jadi saya tidak akan membahas ini lagi.

Dapatkan orang yang Anda ikuti saja

Terakhir, mari kita bandingkan daftar nama pengguna pengikut dengan daftar nama pengguna berikut untuk menemukan yang bukan pengikut.

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))

Berdasarkan nama pengguna berikut, kami memeriksa daftar semua nama pengguna pengikut satu per satu, dihitung jika ada, dan berulang kali melakukan logika untuk keluar.

Jika penghitungannya 0, itu berarti saya mengikuti tetapi tidak pada daftar pengikut, jadi saya tidak F4F dan menambahkannya ke array hasil.

Akhirnya, mengeluarkan array yang dihasilkan mencapai tujuan yang diinginkan.

Seperti ini.

Saya mengikuti tetapi Anda tidak?

Untuk referensi, saya hanya mengikuti kenalan saya, jadi tidak banyak orang yang tidak mengikuti saya.

Itu hanya melayani tujuannya.

Berbagi sumber lengkap

Jika ada yang menginginkannya, tolong bagikan.

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))

Sampai jumpa di lain waktu dengan topik lain.

(Perhatian) Nama kelas dapat diubah dari waktu ke waktu, jadi jika program tidak berfungsi, Anda mungkin harus mencari tahu sendiri struktur tag Instagram untuk memperbaikinya.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

id_IDBahasa Indonesia