【问题标题】:Scraping Instagram Data with Requests and BS (NEW)使用请求和 BS 抓取 Instagram 数据(新)
【发布时间】:2021-04-03 07:57:47
【问题描述】:

首先我不想有关于如何使用元标记以旧方式执行此操作的帖子,但无论出于何种原因,元标记将不再起作用,我已经看到使用 json 可以以某种方式工作,但我不是对json很熟悉。完全一样。我有点修改了我必须为此工作的内容,但仍然没有。目标只是获取帐户(用户)的关注者数量。

def follower_amt(self, user):
    time.sleep(6)     
    # old method deprecated
    # now requires using json file
    html = requests.get(f'https://www.instagram.com/{user}/?__a=1')
    soup = BeautifulSoup(html.text, 'lxml')
    data = soup.findAll('span', {'class':'g47SY'})
    text = data[0].get('content').split()
    user = '%s %s %s' % (text[-3], text[-2], text[-1])
    followers = text[0]

感谢任何帮助!

【问题讨论】:

  • 此信息不能来自 API 吗?另外,你能举个例子完整的url和预期的返回值
  • @QHarr Instagram 很久以前就弃用了他们的 API,所以我们必须求助于这个。一个示例 URL 只是 instagram.com/brandonator24 并且附加的 '?__a=1' 来自我读到的关于使用 json 的内容,我不熟悉。它应该返回关注者数量的字节字符串,但这正是我所拥有的,但可能会改变。

标签: python json beautifulsoup python-requests


【解决方案1】:

(注意:未经测试,因为怀疑是否允许抓取)

我在脚本标签的页面源代码中看到了该值,这意味着您可以按如下方式进行正则表达式:

import requests, re

r = requests.get('https://www.instagram.com/brandonator24/', headers = {'User-Agent':'Mozilla/5.0').text

print(int(re.search('"edge_follow":{"count":(\d+)}', r).groups(0)[0]))

这当然是一个广泛的假设,其他页面也有类似的设置。


正则表达式含义:

【讨论】:

  • 它说它需要一个字符串或字节之类的对象?我也可以看到正则表达式在工作,但如果可能的话,我想用漂亮的汤让它工作。我到了我认为应该工作但没有的这一点
  • soup = BeautifulSoup(r.content, 'html.parser') stuff = soup.find_all('meta', name='description')
  • 不应该说需要像对象这样的字节,因为请求是对字符串 url 的请求,而我从响应对象中获取的是字符串 .text。尝试在编辑中添加标题。
  • 好的,添加标题工作!您能否简要解释一下标头是什么以及在没有它们之前请求是如何工作的,直到最近才进行?
  • 我猜服务器现在已配置为在收到的请求中查找某些标头。这很常见。阅读标题:developer.mozilla.org/en-US/docs/Web/HTTP/Headers
【解决方案2】:

根据你给的ApiUrl。

你可以得到你想要的,对吧?

import requests

headers = {
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'}
res = requests.get(f'https://www.instagram.com/{user}/?__a=1', headers=headers)

print(res.json()['graphql']['user']['username'])
print(res.json()['graphql']['user']['edge_followed_by']['count'])

【讨论】:

  • 我运行了它,它给了我一个JSONDecodeError: Expecting value: line 1 column 1 (char 0) 在今天之前我真的没有使用 json 的经验,所以我迷路了。如果可能的话,我想像以前一样用漂亮的汤。
  • 但是我的操作还可以,可以给我一个UserID吗?
  • 是的,它是brandonator24
猜你喜欢
  • 1970-01-01
  • 2016-10-25
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多