这是一个基于aiohttp实现的异步Instagram爬虫,可批量爬取公开ins账号的图片帖信息。
- 按给定公开账户名爬取相关数据。
- 按关键词列表搜索公开账户。
- 3处自定义钩子函数。
- 用户友好的数据交互(提供NamedTunple和dict类型的数据报告)
- 代理(受限于aiohttp,目前仅支持http)
- 基本用户信息
- 数字标识
- 发帖数
- 关注数
- 被关注数
- 个人简介
- 帖子信息
- 数字标识
- shortcode
- 发帖时间
- 👍点赞数
- 评论数
- 图片直链
-
评论列表
- aiohttp
- coloredlogs
-
基本接口作用已在注释文档提供。
-
要整合本项目仅需将整个spider文件夹拷贝一份至你的项目中,然后执行必要的导入操作。
import asyncio import aiohttp from spider import core '''你的代码'''
本项目为对历史同步爬虫inspyder的简单重构,旨在拥有代理池时实现安全的并发爬取。关于如何利用异步机制实现并发爬取,我提供了一个demo以供参考。
-
是否支持爬取评论列表?
- 暂不支持,也未打算支持。但是,当前爬取的帖子数据中有shortcode字段。你可以通过该字段生成帖子详情页的url。
-
是否有必要使用代理池?
- 当你并发爬取时,是的。由于本爬虫基于aiohttp这样的异步网络库,即使是在单线程下其并发爬取发起的请求频率也十分惊人。这意味着,如果你不为每个协程中的爬虫分配不同的代理,你将很快因为异常频繁的请求被Instagram拉黑。
-
为何没有直接移植原项目的数据库相关代码?
- 原项目inspyder是2天匆忙赶制的玩具,抛开糟糕的编码,网络请求库requests和数据库依赖sqlalchemy均为同步形的库。直接引入会阻塞整个线程,与协程式代码无法优雅的合作(可以另开一个线程给数据库操作,但这会增加代码复杂度)。
-
那么,如何优雅的引入异步数据库操作?
- 我在项目中提供了3处可自定义的钩子,你可以传入自定义的异步方法。在此推荐一个十分不错的异步的数据库驱动asyncpg。