Python を使用して Instagram からデータをスクレイピングする方法

公開: 2018-10-27
目次を見る
Instagramデータをスクレイピングする方法
トップ Instagrammer の Instagram データの抽出
指定されたハッシュタグの画像リンクを抽出する
努力する理由
スクレイピングシステムをビジネスに統合するには?
Web データの抽出についてサポートが必要ですか?

町がビデオについて話しているなら、それは YouTube でなければならず、町が記事に夢中になっているなら、それは Facebook でなければならず、町全体が最新の写真について話し合っているなら、彼らはただ Instagram にいなければなりません。 Instagramのデータをスクレイピングする方法は次のとおりです

2010 年に設立された Instagram は、世界最大の写真共有アプリになり、Alexa の上位 15 の Web サイトにその Web サイトが最も頻繁にランクインしています。 1×1 の写真アップロード制限しかなかった初期の頃から、Instagram (ほとんどの人が親しみを込めて「インスタ」と呼んでいます) は長い道のりを歩んできました。 最近の Instagram では、写真、ビデオ、ダブスマッシュなど、ほぼすべてのメディアをアップロードできます。 ただし、Instagramで最も気に入っているのは、有名人のプロフィールとハッシュタグです。 実際、ウィキペディアには、世界中で最も多くのフォロワーを持つ Instagram プロフィールがいくつか掲載されています。 数百万人のフォロワーが毎日投稿をチェックしています。 同時に、ハッシュタグは Instagram のもう 1 つの重要な機能です。 彼らは一連の類似した画像を作成するため、誰かがInstagramでハッシュタグを検索すると、類似性または文字通りのつながりを持つ画像を見つけることになります. 簡単な例 – 「#hot」は、燃えているものや火のイメージだけでなく、自分が魅力的だと思っている人のイメージにもつながる可能性があります。

Instagramデータをスクレイピングする方法

そこで今日は、Instagram、より具体的には Instagram ページからのデータのスクレイピングについて検討します。 また、一部のトップ Instagram プロフィールのフォロワー数、フォローしている人数、投稿数も収集します。 タスクを実行するために、プロファイルへのリンクを含むテキスト ファイルを使用します。 リストにさらにプロファイルを追加すると、貼り付けた新しいリンクの詳細もプログラムによって印刷されます。

次に、データをスクレイピングしてテキスト ファイルに保存します。これは、お客様から提供された特定のハッシュタグが付いた画像のリンクです。 ここでも単語のリストをテキスト ファイルに保存し、それを Python で読み取り、単語ごとに #word を実行して Instagram で検索し、ハッシュタグに関連付けられた画像のリンクを取得します。

両方のアクティビティには、プライベート プロファイルの詳細を取得できないなどの特定の制限があり、特定の数のリンク (Instagram には上限があります) のみがダウンロードされます。

いつものように、始める前に、このリンクを確認して Python をセットアップし、テキスト エディターをインストールするようにもう一度お願いします私はatomの方が好きです。リンクをたどると、リンクと、そのダウンロードとインストールの手順が表示されます。 また、指示に従って pip を使用して、前述の python パッケージをインストールします。 さらにいくつかのパッケージをインストールするように頼まれた場合は、外出先で実行できます。

トップ Instagrammer の Instagram データの抽出

したがって、コードに取り掛かると、ここに特定のプログラムへのリンクがあります。 基本的に行ったことは、指定されたテキスト ファイルからリンクを読み取り、各リンクの抽出された html の beautifulsoup オブジェクトを作成し、URL からいくつかの特定の情報を抽出することです。 これは、使用したテキスト ファイルへのリンクです。 これらは、ウィキペディアで言及されているトップ ユーザーの一部です。 ウィキペディアから手動でリンクをコピーしましたが、これもスクレイピングによって行うことができましたが、それは別の DIY 記事に譲ります。

[コード言語=”パイソン”]
#!/usr/bin/python
# -*- コーディング: utf-8 -*-
インポートリクエスト
urllib.request をインポート
urllib.parse をインポートする
urllib.error をインポート
from bs4 import BeautifulSoup
SSL のインポート
json をインポート

クラス Insta_Info_Scraper:

def getinfo (自己、URL):
html = urllib.request.urlopen(url, context=self.ctx).read()
スープ = BeautifulSoup(html, 'html.parser')
データ = スープ.find_all('メタ', attrs={'プロパティ': 'og:説明'
}))
text = data[0].get('content').split()
ユーザー = '%s %s %s' % (テキスト[-3]、テキスト[-2]、テキスト[-1])
フォロワー=テキスト[0]
以下 = テキスト[2]
投稿 = テキスト[4]
印刷 ('ユーザー:'、ユーザー)
print ('フォロワー:', フォロワー)
印刷 (「以下:」、以下)
print ('投稿:', 投稿)
プリント ('————————')

デフメイン(自己):
self.ctx = ssl.create_default_context()
self.ctx.check_hostname = False
self.ctx.verify_mode = ssl.CERT_NONE

open('users.txt') を f:
self.content = f.readlines()
self.content = [self.content の x の x.strip()]
self.content の URL の場合:
self.getinfo(URL)

__name__ == '__main__' の場合:
obj = Insta_Info_Scraper()
obj.main()
[/コード]

プログラムとテキストファイルを同じフォルダーに保存してコマンドを実行すると、

python insta_info_scraper.py、これがコマンドプロンプトに表示されます-

[コード言語=”パイソン”]

H:Python_Algorithmic_ProblemsScraping_assignmentsInstagram-Data-Extractor>python insta_info_scraper.py
ユーザー: セレナ・ゴメス (@selenagomez)
フォロワー:144.1m
フォロー中: 49
投稿数: 1,468
—————————
ユーザー: クリスティアーノ・ロナウド (@cristiano)
フォロワー:143.1m
フォロー中: 416
投稿数: 2,366
—————————
ユーザー: アリアナ・グランデ (@arianagrande)
フォロワー:130.5m
フォロー中: 1,348
投稿数: 3,669
—————————
ユーザー: テイラー・スウィフト (@taylorswift)
フォロワー:112.1m
フォロー中: 0
投稿数: 233
—————————
ユーザー: <img draggable=”false” data-mce-resize=”false” data-mce-placeholder=”1” data-wp-emoji=”1” class=”emoji” alt=”&#x1f47b;” src=”https://sworg/images/core/emoji/11/svg/1f47b.svg”> neymarjr (@neymarjr)
フォロワー:103.4m
次: 817
投稿数: 4,263
—————————
ユーザー: ジャスティン・ビーバー (@justinbieber)
フォロワー:102.5m
フォロー中: 92
投稿数: 4,367
—————————
[/コード]

これはコマンド プロンプトの出力ですが、次を使用して詳細をテキスト ファイルに保存できます。

python insta_info_scraper.py > info.txt

これにより、出力がテキスト ファイルに保存されます。さらに良いことに、すべてを json に保存することもできます。 では、このすべての情報を含む json ファイルを作成するにはどうすればよいでしょうか? 以下にそれを示します。

[コード言語=”パイソン”]

#!/usr/bin/python
# -*- コーディング: utf-8 -*-
インポートリクエスト
urllib.request をインポート
urllib.parse をインポートする
urllib.error をインポート
from bs4 import BeautifulSoup
SSL のインポート
json をインポート

クラス Insta_Info_Scraper:

def getinfo (自己、URL):
html = urllib.request.urlopen(url, context=self.ctx).read()
スープ = BeautifulSoup(html, 'html.parser')
データ = スープ.find_all('メタ', attrs={'プロパティ': 'og:説明'
}))
text = data[0].get('content').split()
ユーザー = '%s %s %s' % (テキスト[-3]、テキスト[-2]、テキスト[-1])
フォロワー=テキスト[0]
以下 = テキスト[2]
投稿 = テキスト[4]
情報={}
info[“ユーザー”] = ユーザー
info[“フォロワー”] = フォロワー
info[“フォロー中”] = フォロー中
info[「投稿」] = 投稿
self.info_arr.append(情報)

デフメイン(自己):
self.ctx = ssl.create_default_context()
self.ctx.check_hostname = False
self.ctx.verify_mode = ssl.CERT_NONE
self.info_arr=[]

open('users.txt') を f:
self.content = f.readlines()
self.content = [self.content の x の x.strip()]
self.content の URL の場合:
self.getinfo(URL)
出力ファイルとして open('info.json', 'w') を使用:
json.dump(self.info_arr, outfile, indent=4)
print(「必要な情報を含むJsonファイルが作成されました…………」)

__name__ == '__main__' の場合:
obj = Insta_Info_Scraper()
obj.main()
[/コード]

このコードを実行すると、1 つのステートメントのみが表示されます。

[コード言語=”パイソン”]

H:Python_Algorithmic_ProblemsScraping_assignmentsInstagram-Data-Extractor>python insta_info_scraper_json_format.py
必要な情報を含むJsonファイルが作成される…………
[/コード]

ただし、同時に、 info.jsonという json ファイルがフォルダーに作成されます。

jsonは次のようになります-

[コード言語=”パイソン”]

[
{
「ユーザー」:「セレナ・ゴメス(@selenagomez)」、
「フォロワー」:「144.1m」、
“次”: “49”,
「投稿」:「1,468」
}、
{
「ユーザー」:「クリスティアーノ・ロナウド(@cristiano)」、
「フォロワー」:「143.1m」、
“次”: “416”,
「投稿」:「2,366」
}、
{
“ユーザー”: “アリアナ・グランデ (@arianagrande)”,
「フォロワー」:「130.5m」、
「次」:「1,348」、
「投稿」:「3,669」
}、
{
「ユーザー」:「テイラー・スウィフト(@taylorswift)」、
「フォロワー」:「112​​.1m」、
「次」:「0」、
「投稿」:「233」
}、
{
“ユーザー”: “ud83dudc7b neymarjr (@neymarjr)”,
「フォロワー」:「103.4m」、
“次”: “817”,
「投稿」:「4,263」
}、
{
“ユーザー”: “ジャスティン・ビーバー (@justinbieber)”,
「フォロワー」:「102.5m」、
“次”: “92”,
「投稿」:「4,367」
}
[/コード]

データは同じですが、より管理しやすく使いやすい形式になっていることがわかります。 抽出したデータを別の形式で保存しただけです。 しかし、何千もの Instagram プロフィールから抽出したデータを使用するプログラムを作成したり、アプリを作成したりする場合、どのタイプのデータ構造がコードで使いやすいでしょうか? json ファイルですか、それともテキスト ファイルですか。 データのクリーニングは見過ごされがちですが、非常に重要なステップです。 実際、多くのデータ サイエンティストは、複雑なモデルやシミュレーションに取り組んでいるものの、データの抽出、クリーニング、および再配置が作業のほぼ 70% を占めていると告白しています。 これで、Instagram データをスクレイピングする方法について詳しく学んだはずです。

指定されたハッシュタグの画像リンクを抽出する

有名人のアカウントからの情報ではなく、画像が Instagram の主なリソースです。 そして、Instagram ハッシュタグを使用して特定のハッシュタグを含む画像をダウンロードするよりも、画像を取得してクラスターを形成し、機械学習モデルを構築するよりも優れた方法はありません。

これが以下に与えられコードです -

[コード言語=”パイソン”]

#!/usr/bin/python
# -*- コーディング: utf-8 -*-
インポートリクエスト
urllib.request をインポート
urllib.parse をインポートする
urllib.error をインポート
from bs4 import BeautifulSoup
SSL のインポート
json をインポート

クラス Insta_Image_Links_Scraper:

def getlinks (自己、ハッシュタグ、URL):

html = urllib.request.urlopen(url, context=self.ctx).read()
スープ = BeautifulSoup(html, 'html.parser')
スクリプト = スープ.find('スクリプト', テキスト=ラムダ t:
t.startswith('window._sharedData'))
page_json = script.text.split(' = ', 1)[1].rstrip(';')
データ = json.loads(page_json)
print (「#でリンクをスクレイピング」+ハッシュタグ+”…………..”)
データの投稿['entry_data']['TagPage'][0]['graphql'
]['ハッシュタグ']['edge_hashtag_to_media']['エッジ']:
image_src = post['node']['thumbnail_resources'][1]['src']
hs = open(ハッシュタグ + '.txt', 'a')
hs.write(image_src + 'n')
hs.close()

デフメイン(自己):
self.ctx = ssl.create_default_context()
self.ctx.check_hostname = False
self.ctx.verify_mode = ssl.CERT_NONE

open('hashtag_list.txt') を f:
self.content = f.readlines()
self.content = [self.content の x の x.strip()]
self.content のハッシュタグの場合:
self.getlinks(ハッシュタグ、
「https://www.instagram.com/explore/tags/」
+ ハッシュタグ + '/')

__name__ == '__main__' の場合:
obj = Insta_Image_Links_Scraper()
obj.main()
[/コード]

このプログラムでは、ムスタング、ネイチャー、ナイキ、フットボール、FIFA といったいくつかのハッシュタグのテキスト ファイルを使用し、ランダムにいくつかの単語を選択しました。 テキスト ファイル内の単語を変更したり、新しい単語を追加したりできます。それらはハッシュタグの形成に使用され、それらの画像リンクもダウンロードされます。

指定されたプログラムを実行すると、コマンド プロンプトに次のように表示されます。

[コード言語=”パイソン”]
H:Python_Algorithmic_ProblemsScraping_assignmentsInstagram-Data-Extractor>python insta_image_link_scraper.py
#mustang でリンクをスクレイピング…………..
#nature でリンクをスクレイピング…………..
#nike でリンクをスクレイピング…………..
#football でリンクをスクレイピング…………..
#fifa でリンクをスクレイピング…………..
[/コード]

同時に、現在のフォルダーに作成された 5 つのファイルが表示されます。

Mustang.txt、nature.txt、nike.txt、football.txt、fifa.txt

セキュリティ上の理由から、生成されたこれらのファイルへのリンクをアップロードしていません。もちろん、プログラムを実行すると、ハッシュタグに関連する最新のリンクの別のセットが取得されます。 これで、Instagram データをスクレイピングする方法について詳しく学んだはずです。

努力する理由

なぜ努力するのか、必要なときにいつでも Google からいくつかの画像をダウンロードしないのか、と考えているかもしれません。 まあ、それはあなたが達成しようとしているものに依存します。 記事に少数の画像が必要な場合は、Google 画像を使用できます。 しかし、イベント、人物、またはその他のものに関連するすべての画像を取得しようとしている場合は、ハッシュタグを使用して Instagram から画像を取得できます。 このようにして、膨大な画像のセットを取得し、そこから同じ画像や類似の画像を削除するプログラムを作成し、テキスト付きの画像とテキストなしの画像を分離して、両方のタイプの画像を分析に適切に使用できます。

SURF と SIFT (2 つの最高の画像処理アルゴリズム) に始まり、画像認識と画像処理の技術はここ数年で進化してきました。 スピードを出している車からモーション センシング カメラまで、すべて画像を使用して推論を行います。 Instagram のほぼ無制限の画像の供給により、あなたの研究プロジェクトは長い道のりを歩むことができます. これで、Instagram データをスクレイピングする方法について詳しく学んだはずです。

スクレイピングシステムをビジネスに統合するには?

Instagram のような Web サイトから必要に応じてデータをスクレイピングするのは、面倒な作業になる可能性があり、ビジネスなどの重要なことから気が遠くなる可能性があります。 経験豊富な R および Python 開発者がいない場合、Web サイトは高度なセキュリティを備えており、レイアウトを変更し続けるため、正確な要件に従ってInstagram からデータを取得する完全なシステムを構築するのに数か月かかる場合があります。 完全なソリューションについては、PromptCloud などの経験豊富な Web スクレイピング チームに連絡する必要があります。 必要な情報を提供していただくだけで、ビジネスに適した形式でデータが渡されます。 これにより、時間、エネルギー、お金、人員を節約でき、私たちが技術について心配している間、より困難なビジネス上の課題に取り組むことができます。 これで、Instagram データをスクレイピングする方法について詳しく学んだはずです。

Web データの抽出についてサポートが必要ですか?

当社の Web スクレイピング サービスを使用して、ビジネス アプリケーション用の Web サイトからクリーンですぐに使用できるデータを取得します。

免責事項:このチュートリアルで提供されるコードは、学習のみを目的としています。 私たちは、それがどのように使用されるかについて責任を負わず、ソース コードのいかなる有害な使用についても責任を負いません。