用Scrapy编写instagram crawler。我怎样才能转到下一页?

2024-04-23 11:56:47 发布

您现在位置:Python中文网/ 问答频道 /正文

作为练习,我决定编写一个python脚本来获取指定用户的所有图像。我对刮痧比较熟悉,这就是为什么我选择它作为刮削工具的原因。目前,脚本只能从第一页(最多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。在

我怎么能在screpy里找到那个号码然后把我的蜘蛛送到那里?response.body甚至不包含这个数字。有没有其他方法可以到达下一页?在

我知道Instagram API会带来一些好处,但我认为没有这些代币也可以做到。在


Tags: 工具用户图像脚本comid链接response
2条回答

在 您还可以添加参数__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

根据robots.txt策略,您应该avvoid爬行/api//publicapi/和{}路径,因此请仔细(负责任地)对用户分页进行爬网。在

从我所看到的分页也是从一个“loadmore”请求开始的,实际上是一个https://www.instagram.com/query/请求(您需要检查),它只有两个必需的值owner和{},作为POST请求发送。在

这些值可以在'//script[contains(., "sharedData")]/text()'内的原始请求正文中找到

相关问题 更多 >