[Instagram更改了API流程后,如何使用Selenium使用Python抓取Instagram?我找不到所有条目,只能找到12

问题描述 投票:0回答:1

我正在尝试使用Python和Selenium抓取Instagram。目标是获取所有帖子的网址,评论数,喜欢数等。

我能够抓取一些数据,但是由于某种原因,该页面显示的最新条目不超过12个。我无法找出一种方法来显示所有其他条目。我什至尝试向下滚动然后阅读该页面,但只给出了12。我检查了源代码,无法找到如何获取其余条目的方法。看起来12个条目已嵌入到脚本标签中,在其他任何地方都看不到它。

driver = webdriver.Chrome('chromedriver.exe')
driver.get('https://www.instagram.com/fazeapparel/?hl=en')
source = driver.page_source
data=bs(source, 'html.parser')
body = data.find('body')
script = body.find('script', text=lambda t: t.startswith('window._sharedData'))
page_json = script.text.split(' = ', 1)[1].rstrip(';')
data = json.loads(page_json)

使用检索到的数据,我能够找到信息并收集它们。

for each in data['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges']:
    link = 'https://www.instagram.com'+'/p/'+each['node']['shortcode']+'/'
    posttext = each['node']['edge_media_to_caption']['edges'][0]['node']['text'].replace('\n','')
    comments = each['node']['edge_media_to_comment']['count']
    likes = each['node']['edge_liked_by']['count']
    postimage = each['node']['thumbnail_src']
    isvideo = each['node']['is_video']
    postdate = time.strftime('%Y %b %d %H:%M:%S', time.localtime(each['node']['taken_at_timestamp']))
    links.append([link, posttext, comments, likes, postimage, isvideo, postdate])

我什至创建了一个滚动功能来滚动窗口,然后抓取数据,但只返回12。

有什么办法可以获取12个以上的条目?此帐户有46个条目,我无法在代码中的任何地方找到它。请帮助!

javascript python selenium web-scraping instagram
1个回答
0
投票

您是否使用OpenQA.Selenium.Support.UI添加了?它具有WebDriverWait,您可以等待该元素可见。很抱歉在C#中执行此操作。框应返回所有帖子。

© www.soinside.com 2019 - 2024. All rights reserved.