вся информация, которую вы ищете, находится внутри <script type=text/javacript>
. Вы можете получить ее, используя следующее регулярное выражение:
from bs4 import BeautifulSoup as soup
import requests
import json
import re
def _get_json_footer(html):
s = str(html)
r = re.compile('"entry_data":(.*?),"gatekeepers"')
m = r.search(s)
if m:
result = m.group(1)
return json.loads(result)
url = 'https://www.instagram.com/explore/tags/SOMEHASHTAGHERE/'
page = requests.get(url)
html = soup(page.text, 'html.parser')
json_footer = _get_json_footer(html)
tagpage = json_footer.get('TagPage')
Затем вы можете перемещаться внутри tagpage
dictчтобы получить ваши данные
РЕДАКТИРОВАТЬ:
Чтобы получить ссылку на сообщения, вы можете просто перейти внутри tagpage
dict:
from bs4 import BeautifulSoup as soup
import requests
import json
import re
def _get_json_footer(html):
s = str(html)
r = re.compile('"entry_data":(.*?),"gatekeepers"')
m = r.search(s)
if m:
result = m.group(1)
return json.loads(result)
url = 'https://www.instagram.com/explore/tags/SOMEHASHTAGHERE/'
page = requests.get(url)
html = soup(page.text, 'html.parser')
json_footer = _get_json_footer(html)
tagpage = json_footer.get('TagPage')
links = []
edges = tagpage[0].get('graphql',{}).get('hashtag',{}).get('edge_hashtag_to_media',{}).get('edges',[])
for e in edges:
links.append("https://www.instagram.com/p/"+e.get('node',{}).get('shortcode','')+'/')
print(links)
ВЫХОД:
['https://www.instagram.com/p/Bsh4UcdBRvY/', 'https://www.instagram.com/p/Bq8vAMRHtGB/', 'https://www.instagram.com/p/Bn_vfeWhcYL/', 'https://www.instagram.com/p/Bm1QRb2ntWL/', 'https://www.instagram.com/p/Bj5pLHAnVuY/', 'https://www.instagram.com/p/Bfn2QWiHKK5/', 'https://www.instagram.com/p/BfC4ZnTntq0/', 'https://www.instagram.com/p/BeomaB6Hb8-/', 'https://www.instagram.com/p/vYszwjyLdB/', 'https://www.instagram.com/p/sQI6Jfpi3f/', 'https://www.instagram.com/p/sO9oXPMr6K/', 'https://www.instagram.com/p/qzvHuCHUgH/', 'https://www.instagram.com/p/WdlKcCBW3w/']
Вы можете изменить ключ edge_hashtag_to_media
на edge_hashtag_to_top_posts
, чтобы получить другие значения