代码之家  ›  专栏  ›  技术社区  ›  Brandon Pardi

用请求和BS(新)擦除Instagram数据

  •  -1
  • Brandon Pardi  · 技术社区  · 5 年前

    首先,我不想有关于如何使用meta标签的文章,但是不管出于什么原因,meta标签将不再工作,我看到使用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]
    

    1 回复  |  直到 5 年前
        1
  •  1
  •   QHarr    5 年前

    (注:不测试,不允许刮擦)

    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]))
    

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


    正则表达式的含义:

    enter image description here

        2
  •  1
  •   dudulu    5 年前

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

    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'])