初学 Python
爬取接口数据 v1, v2 两个接口
v1 是商品数据 (一次请求得到所有商品数据)
v2 是商品详情数据(需要 v1 的商品 ID 参数请求得到)
for 循环请求 筛选并合并 v1 数据得到 v3
分析 组装数据 然后导入数据库
是全部请求组装完数据,再插入数据库
还是一次组装一次插入?
这个数据量有点大 比较耗时 是要用多线程吗? 怎么解比较好
1
luzhongqiu 2018-05-15 12:55:22 +08:00
如果只是写脚本的话,请求用异步,数据库操作用异步,python 不要想线程
如果框架的话,基本上请求异步做掉了,只要数据库异步就好了 推荐直接 aiohttp 请求,数据用用 aio-libs 下的 |
2
1800x 2018-05-15 15:03:16 +08:00 via Android
分组批量插入
比如一次插入 500 条 进阶版: 待插入数据达到 n 条,执行插入 处理队列为空——也就是暂时不会有更多需要插入的数据,执行插入 |
3
ycz0926 2018-05-15 15:09:18 +08:00
数据多大量
|
4
ml1344677 2018-05-15 15:17:31 +08:00
首先这是一个爬虫策略的问题,假设 V1 接口返回的是一个 list of ID 那么 V1 接口的访问量会远低于 V2 接口,从稳定性和反-反爬虫的角度来说,我建议 V1,V2 分开处理,即 V1 获取所有商品 ID 并保存在本地后,再来通过 V2 获取商品详情,可以保证如果出了什么错后可以断点续爬(已经爬取的 ID 标记字段)。体量很大的话对于 V1,V2 都可以 网络 IO 和数据库 IO 做异步操作。
|
5
Hopetree 2018-05-15 16:16:43 +08:00
@ml1344677 赞同这种方式,v1 请求一次得到 ID,存起来,然后 v2 用多线程,每请求一次插入一次数据,并且把插入过的 ID 记录下来,用日志就行,如果中途出现问题,再将记录过的 ID 和 V1 得到的 ID 进行比对,继续插入剩余的 ID
|
6
soho176 2018-05-15 17:52:04 +08:00
v1 v2 两个接口是 api 吗?还是说你自己的爬虫去爬数据?
|