写与Scrapy的instagram履带牵引装置。我怎样才能进入下一页?

时间:2016-07-18 16:11:53

标签: python scrapy instagram

作为练习,我决定编写一个python脚本来获取指定用户的所有图像。我对Scrapy有点熟悉,这就是为什么我选择它作为刮削工具。目前,该脚本只能从第一页(最多12个)下载图像。

据我所知,Instagram页面是由javascript生成的。 Scrapy的response.body(就像从Chrome浏览器中查看的源代码一样)并不像Chrome的Inspector那样显示html结构。在Chrome中,在12张图片之后,在底部,有一个按钮,指向下一页的链接。

例如,instagram.com/instagram。第2页的链接是instagram.com/instagram/?max_id=1292385931151632610。在第2页上,指向第3页的链接max_id=1287301939457754444

我如何在Scrapy中获取该数字,以便将蜘蛛送到那里? response.body甚至不包含该数字。还有另一种方法可以到达下一页吗?

我知道Instagram API会提供一些好处,但我认为没有所有这些令牌就可以完成。

2 个答案:

答案 0 :(得分:3)

您还可以添加参数__a=1(如https://www.instagram.com/instagram/?__a=1中所示),仅在window._sharedData对象中包含JSON。

我使用像这样的shell脚本做类似的事情:

username=instagram
max=
while :;do
  c=$(curl -s "https://www.instagram.com/$username/?__a=1&max_id=$max")
  jq -r '.user|.id as$user|.media.nodes[]?|$user+" "+.id+" "+.display_src'<<<"$c"
  max=$(jq -r .user.media.page_info.end_cursor<<<"$c")
  jq -e .user.media.page_info.has_next_page<<<"$c">/dev/null||break
done

答案 1 :(得分:2)

根据robots.txt政策,您应该避免抓取/api//publicapi//query/路径,因此请仔细(并负责任地)抓取用户分页。

同样从我看到的分页开始于&#34;加载更多&#34;请求,实际上是https://www.instagram.com/query/请求(您需要检查),只有两个必要的值ownerend_cursor作为POST请求发送。

可以在'//script[contains(., "sharedData")]/text()'

内的原始请求正文中找到这些值