我正在尝试使用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个条目,我无法在代码中的任何地方找到它。请帮助!
您是否使用OpenQA.Selenium.Support.UI添加了?它具有WebDriverWait,您可以等待该元素可见。很抱歉在C#中执行此操作。框应返回所有帖子。