Python爬虫入门教程 16-100 500px摄影师社区抓取摄影师数据

 

写在前面

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

基于上面的目的,我找了了一个不错的页面 https://500px.me/community/search/user
在这里插入图片描述

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

在这里插入图片描述

用户个人中心页面,竟然有关注列表唉~~,nice啊,这个好趴啊,F12分析一下。
在这里插入图片描述

哒哒哒,数据得到了。
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

那么我们只需要这么做就可以了

  1. 获取关注总数
  2. 关注总数除以100,循环得到所有的关注者(这个地方为什么用关注,不用粉丝,是因为被关注的人更加有价值)
    明确我们的目标之后,就可以开始写代码了。

撸代码

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

用户的起始,我选择的id是5769e51a04209a9b9b6a8c1e656ff9566,你可以随机选择一个,只要他有关注名单,就可以。
导入模块,这篇博客,用到了redismongo,所以相关的基础知识,我建议你提前准备一下,否则看起来吃力。

import requests import threading  from redis import StrictRedis import pymongo  #########mongo部分######################### DATABASE_IP = '127.0.0.1' DATABASE_PORT = 27017 DATABASE_NAME = 'sun' client = pymongo.MongoClient(DATABASE_IP,DATABASE_PORT) db = client.sun db.authenticate("dba", "dba") collection = db.px500  # 准备插入数据  #########mongo部分#########################  #########redis部分######################### redis = StrictRedis(host="localhost",port=6379,db=1,decode_responses=True) #########redis部分#########################   #########全局参数部分######################### START_URL = "https://500px.me/community/v2/user/indexInfo?queriedUserId={}" # 入口链接 COMMENT = "https://500px.me/community/res/relation/{}/follow?startTime=&page={}&size=100&type=json" HEADERS = {     "Accept":"application/json",     "User-Agent":"你自己去找找可用的就行",     "X-Requested-With":"XMLHttpRequest" }  need_crawlids = []  # 待爬取的userid  lock = threading.Lock() # 线程锁 #########全局参数部分#########################
def get_followee():     try:         res = requests.get(START_URL.format("5769e51a04209a9b9b6a8c1e656ff9566"),         headers=HEADERS,timeout=3)         data = res.json()         if data:             totle = int(data["data"]["userFolloweeCount"])  

                    
                
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信