Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
*.png
*.prof
/src/**/__pycache__
/*.csv
config.yaml
ig_settings.json
/venv
/__pycache__
/gui_to_spider.json
/data.csv
/gui.py
/test.py
57 changes: 57 additions & 0 deletions InsWrapper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from ins import Ins
from db.database import DatabaseManager
import config
import datetime


# you must have your login cookie
COOKIE = config.cookie

class InsWrapper(Ins):
def __init__(self):
super().__init__(COOKIE)
self.db = DatabaseManager()

def get_UserData(self, keywords: list, mode: str, amount: int):
for keyword in keywords:
counter = 0
username_lst = self.getUsernameBytag(keyword, mode=mode)
for username in username_lst:
if counter >= amount:
break
insert_sql = "insert into users (biography,username,fbid,full_name,user_id,followed_by,follow,noteCount,is_private,is_verified,business_email) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
userInfo = self.get_userInfo(username)
userInfo.pop("avatar", "N/A")
values = list(userInfo.values())
self.db.execute_insert(insert_sql, values)
counter += 1
self.randSleep([60,95])
self.db.remove_duplicate_rows()

def get_postsByUsername(self, username: str, amount: int):
"""Args:
username (str): username
amount (int): user recent posts number
Return: post list
"""

post_lst = []
counter = 0
posts = self.get_userPosts(username)
insert_sql = "insert into posts (code,user_id,comment_count,like_count,introduction,create_time) values (%s, %s, %s, %s, %s, %s)"
for post in posts:
if counter >= amount:
break
post['create_time'] = datetime.datetime.fromtimestamp(int(post['create_time'])).strftime("%Y-%m-%d %H:%M:%S")

values = list(post.values())
self.db.execute_insert(insert_sql, values)
post_lst.append(post)
counter+=1
self.randSleep([60,95])
return post_lst


INS = InsWrapper()
# INS.get_postsByUsername("nasa", 1)
INS.get_UserData(["minecraft"], "top", 10)
14 changes: 14 additions & 0 deletions config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
cookie = {
'ds_user_id': '',
'dpr': '1.5',
'ig_nrcb': '1',
'mid': '',
'ig_did': '',
'datr':'',
'csrftoken': '',
'sessionid':''
}

keyword = ["makeup", "skincare"]

mode = "recent"
6 changes: 0 additions & 6 deletions config_exmple.yaml

This file was deleted.

Binary file added db/__pycache__/database.cpython-311.pyc
Binary file not shown.
55 changes: 55 additions & 0 deletions db/database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import pymysql
import db_config

class DatabaseManager:
def __init__(self):
self.connection = pymysql.connect(host=db_config.host,
user=db_config.user,
password=db_config.password,
database=db_config.database)

def disconnect(self):
if self.connection:
self.connection.close()

def execute_query(self, query, params=None):
with self.connection.cursor() as cursor:
cursor.execute(query, params)
result = cursor.fetchall()
self.connection.commit()
return result

def execute_update(self, query, params=None):
if not self.connection:
self.connect()
with self.connection.cursor() as cursor:
cursor.execute(query, params)
self.connection.commit()

def execute_insert(self, insert_sql: str, params=None):
with self.connection.cursor() as cursor:
cursor.execute(insert_sql, params)
result = cursor.fetchall()
self.connection.commit()
return result

def remove_duplicate_rows(self):
try:
with self.connection.cursor() as cursor:
# 构建 SQL 查询,选择每个用户名的最小 ID
select_query = """
SELECT MIN(ID) AS min_id, username
FROM users
GROUP BY username
"""
cursor.execute(select_query)
results = cursor.fetchall()
delete_query = """
DELETE FROM users
WHERE ID NOT IN ({})
""".format(','.join(str(result['min_id']) for result in results))
cursor.execute(delete_query)
self.connection.commit()
print("Duplicate rows removed successfully.")
except Exception as e:
print("An error occurred:", e)
4 changes: 4 additions & 0 deletions db_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
host = 'localhost'
user = 'root'
password = '123456'
database = 'ins'
37 changes: 0 additions & 37 deletions ig_settings.json

This file was deleted.

Loading