如何在python中抓取instagram帐户信息

时间:2017-09-21 15:19:20

标签: python web-scraping instagram

我正在尝试在python中做一些非常简单的事情,但不知何故,它非常困难。我想要做的就是编写一个python脚本,记录Instagram用户关注的人数以及它的关注者数量。那就是它。

有人能指点我做一个好的方案吗? 最好不是美丽的汤,因为这对我想做的事情过于复杂。我只想要像

这样的东西
[user: example_user, followers:9019, following:217] 

是否有特定于Instagram的python库?

我要抓的帐户是公开的。这对于Twitter来说非常简单。

感谢任何帮助。

6 个答案:

答案 0 :(得分:3)

我不知道你为什么要避免使用BeautifulSoup,因为它实际上非常方便这样的任务。因此,以下几行应该可以完成这项任务:

import requests
from bs4 import BeautifulSoup

html = requests.get('https://www.instagram.com/cristiano/') # input URL here
soup = BeautifulSoup(html.text, 'lxml')

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]

print('User:', user)
print('Followers:', followers)
print('Following:', following)

...输出:

  

用户:Cristiano Ronaldo(@cristiano)

     

粉丝:111.5米

     

以下:387

当然,如果用户拥有超过1米的粉丝(或超过100万用户),您需要进行一些计算以获得实际(但截断的)数字,这应该不会太困难。< / p>

答案 1 :(得分:2)

您可以将selenium与BeautifulSoup结合使用来解析所需的内容。选择器易于理解和精确。最重要的是,您可以使用这些类名或标签来收集在检查元素时可见的所需数据(尽管这是一种瞬态解决方案)。您也不必挖掘页面源。这是:

from selenium import webdriver
from bs4 import BeautifulSoup

driver= webdriver.Chrome()

driver.get('https://www.instagram.com/michaeljackson/')
soup = BeautifulSoup(driver.page_source,"lxml")
driver.quit()

for item in soup.select('._o6mpc'):
    name = item.select('._kc4z2')[0].text
    followers= item.select('._fd86t')[1].text
    following = item.select('._fd86t')[2].text
    print('Name :{}\nFollowers :{}\nFollowing :{}'.format(name,followers,following))

或使用requests(静态):

import requests
from bs4 import BeautifulSoup

html = requests.get('https://www.instagram.com/michaeljackson/')
soup = BeautifulSoup(html.text, 'lxml')
item = soup.select_one("meta[property='og:description']")
name = item.find_previous_sibling().get("content").split("•")[0]
followers = item.get("content").split(",")[0]
following = item.get("content").split(",")[1].strip()
print(f'{name}\n{followers}\n{following}')

结果:

Name :Michael Jackson
Followers :1.6m
Following :4

答案 2 :(得分:1)

否则你可以用这种方式访问​​信息(是的,我使用了beautifulsoup)

from bs4 import BeautifulSoup
import urllib

external_sites_html = 
urllib.urlopen('https://www.instagram.com/<instagramname>/?hl=en')
soup = BeautifulSoup(external_sites_html, 'lxml')

name = soup.find('meta', attrs={'property':'og:title'})
description = soup.find('meta', attrs={'property':'og:description'})

# name of user
nameContent = name.get('content')
# information about followers and following users
descrContent = description.get('content')

从这些变量中,您可以提取所需的信息。但是如果他们的数字超过100万,那么关于粉丝的信息将是不准确的。如果你需要确切的数字,你可能需要使用他们的api。

答案 3 :(得分:0)

有一个instagramy包

点安装instagramy

from instagramy import InstagramUser
user = InstagramUser("github")
profile_pic = user.profile_pic_url
print(user.is_verified)
print(user.number_of_followers)
print(user.number_of_posts)

GitHub repository of the package

答案 4 :(得分:0)

您可以使用instascrape来完成几行代码(免责声明:我是该软件包的作者)

使用pip install insta-scrape进行pip安装,然后尝试获取用户的帐户信息

from instascrape import Profile 
google = Profile("google")
google.scrape()

这将从您可以使用google.followersgoogle.followinggoogle.is_verified等点标记访问的帐户中加载几十个数据点,或者您可以将所有数据作为dictgoogle.to_dict()

{'csrf_token': '19DnM5UYbxusoSnbfUNGGiOr5hU91khz',
 'viewer': None,
 'viewer_id': None,
 'country_code': 'US',
 'language_code': 'en',
 'locale': 'en_US',
 'device_id': 'A0CFC9ED-5769-4951-94B3-F26D5724FDBD',
 'browser_push_pub_key': 'BIBn3E_rWTci8Xn6P9Xj3btShT85Wdtne0LtwNUyRQ5XjFNkuTq9j4MPAVLvAFhXrUU1A9UxyxBA7YIOjqDIDHI',
 'key_id': '132',
 'public_key': 'a185b716b7bab1acb25e88034374819c0482257a4e240736215af2253f255d61',
 'version': '10',
 'is_dev': False,
 'rollout_hash': '7b740aa85a82',
 'bundle_variant': 'metro',
 'frontend_dev': 'prod',
 'logging_page_id': 'profilePage_1067259270',
 'show_suggested_profiles': False,
 'show_follow_dialog': False,
 'biography': 'Google unfiltered—sometimes with filters.',
 'blocked_by_viewer': False,
 'business_email': '',
 'restricted_by_viewer': None,
 'country_block': False,
 'external_url': 'https://linkin.bio/google',
 'external_url_linkshimmed': 'https://l.instagram.com/?u=https%3A%2F%2Flinkin.bio%2Fgoogle&e=ATOMCBcW4YjsNBxlDyAETnOiWt8zHrGTW0VJIufW-ROhSYM5lm2p-JNT060OLDBmMFuoszepQpW0cfEf&s=1',
 'followers': 12262801,
 'followed_by_viewer': False,
 'following': 30,
 'follows_viewer': False,
 'full_name': 'Google',
 'has_ar_effects': False,
 'has_clips': True,
 'has_guides': False,
 'has_channel': False,
 'has_blocked_viewer': False,
 'highlight_reel_count': 6,
 'has_requested_viewer': False,
 'id': '1067259270',
 'is_business_account': True,
 'is_joined_recently': False,
 'business_category_name': 'Business & Utility Services',
 'overall_category_name': None,
 'category_enum': 'INTERNET_COMPANY',
 'is_private': False,
 'is_verified': True,
 'mutual_followers': 0,
 'profile_pic_url': 'https://scontent-lga3-1.cdninstagram.com/v/t51.2885-19/s150x150/119515245_239175997499686_2853342285794408974_n.jpg?_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_ohc=_vp0OGMhUrEAX9mEskb&oh=242d04421b13f2545952203069b164b6&oe=5FC05FDB',
 'profile_pic_url_hd': 'https://scontent-lga3-1.cdninstagram.com/v/t51.2885-19/s320x320/119515245_239175997499686_2853342285794408974_n.jpg?_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_ohc=_vp0OGMhUrEAX9mEskb&oh=604348546412db230d638292b39f7abe&oe=5FC2E223',
 'requested_by_viewer': False,
 'username': 'google',
 'connected_fb_page': None,
 'posts': 1416}

如果确实只需要几个数据点,则可以将它们的名称作为键明确传递给Post.load

from instascrape import Profile 
google = Profile("google")
google.scrape(keys=['followers', 'following'])

google.to_dict()因此会给我们

{'followers': 12262807, 'following': 30}

答案 5 :(得分:0)

import requests

username = "cristiano"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

user_info = requests.get('https://instagram.com/%s/?__a=1'%username, headers = headers)

print (user_info.json())