【问题标题】:Python Instagram Web scraper troublesPython Instagram 网络爬虫问题
【发布时间】:2020-03-03 22:50:57
【问题描述】:

我正在尝试构建一个网络爬虫来告诉我在 Instagram 上使用主题标签的次数,但我不断收到不同迭代的错误代码或当前响应的“无”。 这是我的代码和 html。

Python

import requests
from bs4 import BeautifulSoup
url = 'https://www.instagram.com/explore/tags/savethekids/'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
tag = soup.find("span", {"class": "g47SY "})
print(tag)

这是我写的代码

HTML

<span class="-nal3 ">
  <span class="g47SY ">22,922</span> 
   " posts"
</span>

这是来自 Instagram 的 HTML

如果真正知道自己在做什么的人可以指出我做错了什么以及如何解决它,那就太好了。

【问题讨论】:

  • 网络抓取是必需的吗?因为如果不是,您可以使用Instagram Basic Display API Media Endpoint 获取媒体的caption,然后解析主题标签。
  • HTML 是由 JavaScript 生成的。它不在实际的页面源中。

标签: python web-scraping


【解决方案1】:

试试这个,

import requests

url = 'https://www.instagram.com/explore/tags/savethekids/?__a=1'

response = requests.get(url)

count = response.json().get('graphql', {}).get('hashtag', {}).get('edge_hashtag_to_media', {}).get('count')

print(count)

输出:

22924

在行动中看到它here

【讨论】:

    【解决方案2】:

    使用请求时的问题是 html 尚未呈现。尝试在抓取 Instagram 上关注tutorial

    这使用名为 selenium 的工具从 instagram 获取实际的 html。

    当您使用 selnium webdriver 时,以下代码应该会获取您正在寻找的元素。

    from selenium.webdriver import Chrome
    browser = Chrome()
    url = 'https://www.instagram.com/explore/tags/savethekids/'
    browser.get(url)
    print(browser.find_element_by_class_name('g47SY'))
    

    【讨论】:

      最近更新 更多