首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Selenium从instagram获取post url,因为每次我这样做时,每次向下滚动时它都会动态变化?

如何使用Selenium从instagram获取post url,因为每次我这样做时,每次向下滚动时它都会动态变化?
EN

Stack Overflow用户
提问于 2020-12-26 21:26:09
回答 1查看 132关注 0票数 0

我试图抓取一个账号上的Instagram帖子,但每当我告诉它向下滚动时,以前的链接就会消失,新的链接就会出现,但从来都不会都在同一个位置,现在它总是只抓取1100个帖子中的29个。

代码语言:javascript
运行
复制
 while(count<10):
        for i in range(1,2):
            #.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            self.browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
            print('.', end="",flush=True)
            time.sleep(2)

        elements = self.browser.find_elements_by_xpath("//div[@class='v1Nh3 kIKUG  _bz0w']")
        hrefElements = self.browser.find_elements_by_xpath("//div[@class='v1Nh3 kIKUG  _bz0w']/a")

        elements_link = [x.get_attribute("href") for x in hrefElements]

        i = 1
        unique = 1
        text_file = open("Passed.txt", "r")
        lines = text_file.readlines()
        text_file.close()
        
        for elements in elements_link:
            print(str(i)+'.',end ="",flush=True)
            found = self.found(elements,lines)
           
            
            if found==True:
                pass
            else:
                with open('Passed.txt','a') as f:
                    f.write(elements+'\n') 
                unique+=1
            i+=1
        count+=1
        
        print('-----------------------------------------------')
        print('No. of unique Posts Captured : '+ str(unique))
        print('-----------------------------------------------')

这是我的代码,用于加载帖子并从帖子中捕获链接,然后将其保存到另一个文件中,这样我就不必每次都重新运行它。找到的函数

代码语言:javascript
运行
复制
`   def found(self,key,lines):
    for i in lines:
        if i == key + '\n':
            return True
        else:
            return False

`

我正在尝试捕获1100个帖子

下面是它每次向下滚动时发生的情况

然后向下滚动此更改以

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-27 00:46:01

您应该首先找到链接,然后向下滚动页面,以便保存链接,滚动页面,并获得滚动页面时显示的链接。通过这种方式,您还可以保存滚动页面时消失的链接。下面是一个示例:

代码语言:javascript
运行
复制
wait = WebDriverWait(self.browser, 10)
links = []
number_of_posts = 1100

while True:
   hrefElements = wait.until(ec.visibility_of_all_elements_located((By.XPATH, "//div[@class='v1Nh3 kIKUG  _bz0w']/a")))

   elements_link = [x.get_attribute("href") for x in hrefElements]
   for link in elements_link:
       if link not in links:
           links.append(link)

   self.browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
   self.browser.implicitly_wait(5)

  if len(links) >= number_of_posts:
      break

links = links[:number_of_posts]
with open('Passed.txt','a') as f:
    for link in links:
        f.write(elements+'\n') 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65456862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档