Использование python для сбора информации о пользователях из Instagram - PullRequest
1 голос
/ 10 июня 2019

В настоящее время я использую python для сбора информации от пользователей в Instagram, используя текстовый файл, содержащий ссылки пользователей instagram. Хотя я могу собирать # подписчиков, # подписок и # постов, я хочу иметь возможность собирать био-информацию от пользователя. Сбор био-информации позволит мне в конечном итоге проанализировать эту информацию и собирать электронные письма. Какой самый лучший и простой способ сделать это?

Я не настолько опытен в Python, поэтому взял пример кода из интернета. Я пытался проанализировать код и использовать то, что я знаю, чтобы изменить его под свои нужды, но безрезультатно.

import requests
import urllib.request
import urllib.parse
import urllib.error
from bs4 import BeautifulSoup
import ssl
import json


class Insta_Info_Scraper:

    def getinfo(self, url):
        html = urllib.request.urlopen(url, context=self.ctx).read()
        soup = BeautifulSoup(html, 'html.parser')
        data = soup.find_all('meta', attrs= {'property':'og:description'})
        text = data[0].get('content').split()
        user = '%s %s %s' % (text[-3], text[-2], text[-1])
        followers = text[0]
        following = text[2]
        posts = text[4]
        email = ""
        print ('User:', user)
        print ('Followers:', followers)
        print ('Following:', following)
        print ('Posts:', posts)
        print ('Email:', email)
        print ('---------------------------')

    def main(self):
        self.ctx = ssl.create_default_context()
        self.ctx.check_hostname = False
        self.ctx.verify_mode = ssl.CERT_NONE

        with open('users.txt') as f:
            self.content = f.readlines()
        self.content = [x.strip() for x in self.content]
        for url in self.content:
            self.getinfo(url)


if __name__ == '__main__':
    obj = Insta_Info_Scraper()
    obj.main()

В данный момент я помещаю пустую строку в качестве значения для переменной 'email', но в итоге хочу заменить ее кодом, который будет получать электронную почту от конкретных пользователей.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Удобным инструментом для доступа к публичным структурам данных Instagram является Instaloader , пакет Python, который предоставляет как модуль Python, так и интерфейс командной строки для доступа к Instagram.После установки pip install instaloader для его установки вы можете легко получить метаданные профиля, сохраненные в файлах JSON, с помощью

instaloader --no-posts --no-profile-pic --no-compress-json profile1 [profile2 ...]

. Затем вы можете использовать jq , - легкую и гибкую команду:line JSON Processor ", для извлечения только что сохраненной информации, например, следующая команда печатает биографию profile1:

jq -r .node.biography profile1/profile1_*.json

Аналогично, способ не покидая Python для доступа к той же информации:

import instaloader
L = instaloader.Instaloader()
profile = instaloader.Profile.from_username(L.context, 'profile1')
print(profile.biography)
0 голосов
/ 10 июня 2019

Лучший способ сделать это - использовать сторонние библиотеки, такие как instagram_private_api .

пример:

from instagram_web_api import Client

web_api = Client(auto_patch=True, drop_incompat_keys=False)
user_info = web_api.user_info2('instagram')
print(user_info)
...