位置: 编程技术 - 正文

python实现多线程抓取知乎用户(python 的多线程)

编辑:rootadmin

推荐整理分享python实现多线程抓取知乎用户(python 的多线程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python多线程操作,python多线程操作,python多线程怎么用,python中多线程,python多线程操作,python,多线程,python,多线程,python如何多线程,内容如对您有帮助,希望把文章链接给更多的朋友!

需要用到的包:

beautifulsoup4 html5lib image requests redis PyMySQL

pip安装所有依赖包:

运行环境需要支持中文

测试运行环境python3.5,不保证其他运行环境能完美运行

需要安装mysql和redis

配置 config.ini 文件,设置好mysql和redis,并且填写你的知乎帐号

向数据库导入 init.sql

Run

开始抓取数据: python get_user.py 查看抓取数量: python check_redis.py

效果

总体思路

1.首先是模拟登陆知乎,利用保存登陆的cookie信息2.抓取知乎页面的html代码,留待下一步继续进行分析提取信息3.分析提取页面中用户的个性化url,放入redis(这里特别说明一下redis的思路用法,将提取到的用户的个性化url放入redis的一个名为already_get_user的hash table,表示已抓取的用户,对于已抓取过的用户判断是否存在于already_get_user以去除重复抓取,同时将个性化url放入user_queue的队列中,需要抓取新用户时pop队列获取新的用户)4.获取用户的关注列表和粉丝列表,继续插入到redis5.从redis的user_queue队列中获取新用户继续重复步骤3

模拟登陆知乎

首先是登陆,登陆功能作为一个包封装了在login里面,方便整合调用

header部分,这里Connection最好设为close,不然可能会碰到max retireve exceed的错误原因在于普通的连接是keep-alive的但是却又没有关闭

python实现多线程抓取知乎用户(python 的多线程)

进入首页查看http状态码来验证是否登陆,为已经登陆,一般就是被重定向所以就是没有登陆

获取验证码的方法。当登录次数太多有可能会要求输入验证码,这里实现这个功能

获取xsrf,为什么要获取xsrf呢,因为xsrf是一种防止跨站攻击的手段,具体介绍可以看这里csrf在获取到xsrf之后把xsrf存入cookie当中,并且在调用api的时候带上xsrf作为头部,不然的话知乎会返回

这个就是核心的登陆功能啦,非常关键的就是用到了requests库,非常方便的保存到session我们这里全局都是用单例模式,统一使用同一个requests.session对象进行访问功能,保持登录状态的一致性

最后主要调用登陆的代码为

知乎模拟登陆到此就完成啦

知乎用户抓取

这个是get_user.py的构造函数,主要功能就是初始化mysql连接、redis连接、验证登陆、生成全局的session对象、导入系统配置、开启多线程。

这一部分的代码就是用于抓取各个页面的html代码

用户加入redis的操作,在数据库插入出错时我们调用del_already_user删除插入出错的用户

调用知乎的API,获取所有的关注用户列表和粉丝用户列表,递归获取用户这里需要注意的是头部要记得带上xsrf不然会抛出

最后,到用户的about页面,分析页面元素,利用正则或者beatifulsoup分析抓取页面的数据这里我们SQL语句用REPLACE INTO而不用INSERT INTO,这样可以很好的防止数据重复问题

最后,入口

这里就是多线程的开启,需要开启多少个线程就把4换成多少就可以了

Docker

嫌麻烦的可以参考一下我用docker简单的搭建一个基础环境:

mysql和redis都是官方镜像

再利用docker-compose运行python镜像,我的python的docker-compose.yml:

最后附上源代码: GITHUB

详解python3百度指数抓取实例 百度指数抓取,再用图像识别得到指数前言:土福曾说,百度指数很难抓,在淘宝上面是块1个关键字:哥那么叼的人怎么会被他吓到,于是乎花了零

Python 包含汉字的文件读写之每行末尾加上特定字符 最近,接手的项目里,提供的数据文件格式简直让人看不下去,使用pandas打不开,一直是ioerror.仔细查看,发现文件中很多行数据是以"结尾,然而其他

请不要重复犯我在学习Python和Linux系统上的错误 本人已经在运维行业工作了将近十年,我最早接触Linux是在大二的样子,那时候只追求易懂,所以就选择了Ubuntu作为学习、使用的对象,它简单、易用、

标签: python 的多线程

本文链接地址:https://www.jiuchutong.com/biancheng/382430.html 转载请保留说明!

上一篇:浅谈Python类里的__init__方法函数,Python类的构造函数(python 类的用法)

下一篇:详解python3百度指数抓取实例(python3.8基础教程)

  • 小规模纳税人减按1%政策文件
  • 买房契税缴纳比例
  • 税金及附加包括印花税吗
  • 不征税收入计入应纳税所得额吗
  • 研发支出管理制度
  • 网银制单了没有审核有影响吗
  • 企业收到劳务费发票账务处理
  • 融资性售后回租是什么服务
  • 创立一个公司,公司的运营理念
  • 固定资产折旧年限
  • 其他收益科目账务处理
  • 公司对项目管理方式
  • 非营利组织注册登记证件图片
  • 生物资产出售的账务处理
  • 土地增值税清算比例的计算
  • 个体生产经营所得税税率2023
  • 城建税按实际缴纳增值税
  • 幼儿园开学费发票内容
  • 小规模纳税季度申报
  • 住宿费专用发票会计分录
  • 稳岗补贴能享受多久
  • 一般纳税人收到专票怎么做分录
  • 税控技术服务费需要交印花税吗
  • 销售结算款扣款怎么记账?
  • 公司投资另外一个公司全资占股需要什么流程
  • 车票进项税可以跨年抵扣吗
  • 转出未交增值税借方余额表示什么
  • 给外国教授发邮件最后一句
  • 苹果13promax哪个颜色最贵
  • 收到投标保证金利息会计分录
  • 处理车辆违章送哪个部门
  • 捐赠与赞助
  • 支付厂房租金计入什么科目
  • 不开票收入如何纳税申报
  • 交易性金融资产的交易费用计入哪里
  • 没有收入的情况下可以填成本吗
  • 深入php:面向对象、模式与实践
  • 在沙滩上的语句
  • 工业会计和商业会计有什么区别
  • chatGPT之Python API启用上下文管理
  • 最好用的电脑强力卸载软件
  • 退回税款如何做账
  • 股权划转有税费吗
  • 投资收益主要来源于
  • sql server rollup函数
  • pos机刷卡未成功却扣了钱啥时候就退回来了
  • 怎么计算城市
  • 农产品税率2020年计算
  • 建筑企业预缴税
  • 活动费用在哪个科目
  • 销售收入分成率公式
  • 增资扩股步骤
  • 企业办公楼房产税如何征收
  • 农产品计算抵扣税率 最新
  • 车辆保险费计入现金流量表哪里
  • 个体工商户可以变更法人吗
  • 哪些行业可以开收购发票
  • 培训费开增值税专用发票可以抵扣吗
  • 亏损太多账务如何处理
  • 转账支票有效期6个月
  • mysql进阶之路
  • 计算机二级考试时间2024
  • 不重装系统怎么修复
  • ubuntu20安装fcitx5
  • windows xp玩游戏
  • xpwy cd server已停止工作
  • win7系统纯净版和旗舰版
  • win7软件界面显示不全怎么办
  • 升级win10错误
  • windows8优化
  • bass表示什么
  • 慎用小儿百部止咳糖浆
  • Node.js中的什么模块是用于处理文件和目录的
  • 新浪微博随时随地
  • nodejs获取get请求参数
  • 蓝色的css代码
  • js 类的继承
  • 湖北税务发票查询系统网
  • 关于地税代收工会经费工作实施办法
  • 广东电子税务局财务报表在哪里查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设