博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归爬取微博所有用户信息
阅读量:3724 次
发布时间:2019-05-22

本文共 1491 字,大约阅读时间需要 4 分钟。

控制爬取速度0.5间隔和32并行

# -*- coding: utf-8 -*-

import json
from scrapy import Spider, Request
from weibouser.items import WeibouserItem
class WeiboSpider(Spider):
    name = 'weibo2'
    allowed_domains = ['weibo.cn']
    id = "5702787827"
    # 第一次发起请求
    def start_requests(self):
        # 发现每一页只有url后面的id不同,直接发送请求也可以得到响应
        # for i in range(300):
            yield Request(
                url="https://m.weibo.cn/api/container/getIndex?containerid=231051_-_fans_-_"+str(self.id)+"&luicode=10000011&lfid=107603"+str(self.id)+"&featurecode=20000320&since_id="+str(1),
                callback=self.parse
            )
    # 处理得到的json
    def parse(self, response):
        result = json.loads(response.body.decode("utf-8"))
        try:
            result = result["data"]["cards"][0]["card_group"]
        except:
            print("没有爬取到数据,退出当前循环")
            return
        # print(result)
        item = WeibouserItem()
        # 提取json页面信息
        # 当item中定义需要提取的键值队在result中就赋值,快捷的遍历所有
        for data in result:
            for field in item.fields:
                # for i in data:
                if field in data["user"]:
                    item[field] = data["user"][field]
                    print(item[field])
        # with open("ww","w") as f:
        #     f.write(result)
            yield item
        # print(response.text)
            # 将得到的id取出来,在返回调用自己取出内容
            if data["user"]['screen_name'] == '新手指南':
                return
            else:# 
                num1 = 0
                num = int(int(data["user"]["followers_count"])//20)
                print('当前循环次数',num)
                if num > 0: #粉丝数量大于20才爬取
                    if num > 250:# 大于250就可能读取不出来了
                        num = 250
                        for i in range(num):
                            yield Request(
                                url="https://m.weibo.cn/api/container/getIndex?containerid=231051_-_fans_-_"+str(item["id"])+"&luicode=10000011&lfid=107603"+str(item["id"])+"&featurecode=20000320&since_id="+str(i),
                                callback=self.parse
                        )
你可能感兴趣的文章
项目阶段六:查看我的订单模块
查看>>
项目阶段六:后台管理的订单模块
查看>>
项目阶段七:使用 Filter 过滤器拦截/pages/manager/所有内容,实 现权限检查
查看>>
练习——图书管理系统八(根据图书编号填充图书名称下拉控件和验证手机号)
查看>>
web项目使用虚拟路径读取本地图片
查看>>
将windows下文件上传至服务器中
查看>>
mysql授权限失败问题
查看>>
navicat 连接不上虚拟机上的mysql容器 client does not support authentication protocol requested by server;
查看>>
idea远程调试
查看>>
蓝桥杯排队打水问题
查看>>
正则表达式:贪婪模式与懒惰模式
查看>>
机器学习之sklearn.preprocessing.LabelBinarizer()的用法
查看>>
决策树剪枝的思想
查看>>
创建二叉树和遍历二叉树
查看>>
算法训练 区间k大数查询
查看>>
算法训练 K好数
查看>>
B-树和B+树数据结构及B-树的创建和删除操作详细过程
查看>>
使用Hibernate的基本流程
查看>>
使用Hibernate操作实体对象
查看>>
检索语句的使用
查看>>