python爬虫论坛代码_Python爬虫: 500px摄影师社区抓取摄影师数据

今天要抓取的网站为 https://500px.me/ ,这是一个摄影社区,在一个摄影社区里面本来应该爬取的是图片信息,可是我发现好像也没啥有意思的,忽然觉得爬取一下这个网站的摄影师更好玩一些,所以就有了这篇文章的由来。263a2fc44651186024eff66994058e6c.png

基于上面的目的,我找了了一个不错的页面 https://500px.me/community/search/user681ed69709aa4b90902e664cc113d603.png

不过细细分析之后,发现这个页面并不能抓取到尽可能多的用户,因为下拉一段时间,就不能继续了,十分糟心,难道我止步于此了么,显然不可能的,一番的努力之后(大概废了1分钟吧),我找到了突破口,任意打开一个用户的个人中心页,就是点击上述链接的任意用户头像,出现如下操作。32d6282419be3cd38e52e4210f010ea0.gif

用户个人中心页面,竟然有关注列表唉~~,nice啊,这个好趴啊,F12分析一下。518c7e76a30a66068eef55968e9fb96f.png

哒哒哒,数据得到了。

URL是 https://500px.me/community/res/relation/4f7fe110d4e0b8a1fae0632b2358c8898/follow?startTime=&page=1&size=10&type=json

参数分别如下,实际测试发现size可以设置为100

https://500px.me/community/res/relation/{用户ID}/follow?startTime=&page={页码}&size={每页数据}&type=json

那么我们只需要这么做就可以了获取关注总数

关注总数除以100,循环得到所有的关注者(这个地方为什么用关注,不用粉丝,是因为被关注的人更加有价值)

明确我们的目标之后,就可以开始写代码了。

撸代码

基本操作,获取网络请求,之后解析页面,取得关注总数。

用户的起始,我选择的id是5769e51a04209a9b9b6a8c1e656ff9566,你可以随机选择一个,只要他有关注名单,就可以。

导入模块,这篇博客,用到了redis和mongo,所以相关的基础知识,我建议你提前准备一下,否则看起来吃力。

679dd46a046a98ae4e481c018357a0f9.png

6a74ee99718c879b715fc638ff91d1d4.png

上面代码中有一个非常重要的逻辑,就是为什么要先匹配种子地址的【关注数】和【用户ID】,这两个值是为了拼接下面的URL

https://500px.me/community/res/relation/{}/follow?startTime=&page={}&size=100&type=json

经过分析,你已经知道,这个地方第一个参数是用户id,第二个参数是页码page,page需要通过关注总数除以100得到。不会算的,好好在纸上写写吧~

我们可以通过一个方法,获取到了种子用户的关注列表,以此继续爬取下去,完善生产者代码。关键代码都进行了注释标注。

思路如下:死循环不断获取need_crawlids 变量中的用户,然后获取该用户的关注者列表。

爬取到的信息,写入redis方便验证重复,快速存储。

b6ab31966379138965db289c3ab10903.png

由于500px无反爬虫,所以运行起来速度也是飞快了,一会就爬取了大量的数据,目测大概40000多人,由于咱是写教程的,我停止了爬取。

f2d16a351dd55d0607063e957dd63058.png

1d9ce4d76e2c9b67f8c39768d6be3531.png

这些数据不能就在redis里面趴着,我们要用它获取用户的所有信息,那么先找到用户信息接口,其实在上面已经使用了一次

https://500px.me/community/v2/user/indexInfo?queriedUserId={} 后面的queriedUserId对应的是用户id,只需要从刚才的数据里面获取redis的key就可以了,开始编写消费者代码吧,我开启了5个线程抓取。

65cebd95a39128f44e016b595a208ecc.png

代码没有特别需要注意的,可以说非常简单了,关于redis使用也不多。

6eb766fc186217db3909c3b7a7837e30.png

(⊙o⊙)…经过几分钟的等待之后,大量的用户信息就来到了我的本地。

2bf4b2b049019f72f51f54311877a516.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值