如何在 Instagram 上向下滚动到末尾
Posted
技术标签:
【中文标题】如何在 Instagram 上向下滚动到末尾【英文标题】:How to scroll down to the end on Instagram 【发布时间】:2020-03-02 19:24:43 【问题描述】:我试图根据标签“foody”从 instagram 上抓取帖子的网址。 使用 selenium 和 beautifulsoup,我可以抓取大约 2,160 个帖子的网址。
但是,我无法超越(有超过 4,000,000 个帖子)。有没有其他方法可以用“美食”标签刮掉整个帖子?或者至少是 2018-2019 年间发布的帖子的网址?
下面是我的 scraping 代码。
谢谢!
instagram_url = "https://www.instagram.com"
tag_url = "https://www.instagram.com/explore/tags"
ads = "foody" # hashtag
#pausetime
pause_time = 2
#driver
driver = webdriver.Chrome("chromedriver.exe")
#go to hashtag page
driver.get(f"tag_url/ads")
time.sleep(pause_time)
#scroll down
lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
match=False
i = 0
while(match==False):
#urls
html = driver.page_source
bs_html = BeautifulSoup(html, "lxml")
for roots in bs_html.find_all(name="div", attrs="class":"Nnq7C weEfm"):
for link in roots.select("a"):
real = link.attrs["href"]
if real not in reallink:
reallink.append(real)
print("appendend data: ", len(reallink))
#Scroll down
lastCount = lenOfPage
print(f"scrolling down i")
i += 1
time.sleep(pause_time)
lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
if lastCount==lenOfPage:
match=True
【问题讨论】:
【参考方案1】:使用 javascript,我能够向下滚动 3176 张图片,时间可追溯到 2 年零 4 个月。
我一共找到了 3166 张图片。之后它说“加载失败”。
我尝试再次重复这个实验,现在它似乎不会让我向下滚动太多。
我的猜测是,Instagram 对您可以抓取的内容有某种限制,因此人们不会滥用他们的服务器。
【讨论】:
【参考方案2】:试试Social Scroll for Instagram extention(我知道这很基础,但对我有用)。正如 Alvaro Bataller 所说,如果您编写一些脚本向下滚动,那么在滚动几个帖子后,instagram 系统会自动阻止您一段时间,认为您可能是机器人。
但是这个扩展有一个内置的冷却系统,它会暂停滚动,这样 insta 系统就不会把你误认为是机器人。而且它可以很容易地让你到达最后的帖子,而不会被 insta 阻塞。
【讨论】:
以上是关于如何在 Instagram 上向下滚动到末尾的主要内容,如果未能解决你的问题,请参考以下文章