微博scrapy爬虫实战经验分享

这两天想要爬一些微博的数据,在github上找到了开源代码,但是在实际使用过程中遇到了很多困难,在此做一下记录。


安装MongoDB

首先安装MongoDB,Windows系统教程可以参考这里。

获取微博小号

因为需要爬的数据量较大,笔者采用了senior版本,通过构建微博小号账号池来提高爬虫效率,因此购买了一些微博小号。目前网页版微博已经全部需要验证码登录了,但是有一些小号可以在手机微博极速版APP上免验证登录,从而可以手动获取账号的cookie。这里说一下,购买的小号不一定都可以用,例如笔者买了20个,只有6个可以顺利在极速版APP上免验证登录,其他账号均出现各种问题,包括账号异常无法登录、需要验证码登录或密码不正确等。
具体方法是首先使用微博极速版免验证登录小号,然后在网页版上登录同一账号,此时应需要验证码,选择“使用其他方式登录”→“使用私信接收验证码”,之后就会在手机极速版上接收到一个验证码,使用这个验证码就可以登录小号了,网页版登录成功后就可以手动提取cookie了,谷歌浏览器的方法是右键点击“检查”,在弹出界面上方选择“Network”一栏,然后刷新网页,选择weibo.cn包,找到里面的cookie信息全部复制下来保存就可以了。
将小号的账号、密码、cookie值分别替换WeiboSpider-senior\weibospider\account\db_utils.py文件中insert_cookie函数的相应参数值,然后使用命令行在account目录下运行

python db_utils.py

就可以将该小号的信息保存在MongoDB的weibo数据库里了。但是在这里笔者遇到了第一个bug:

pymongo.errors.ServerSelectionTimeoutError: mongodb:27017: [Errno 11001] getaddrinfo failed, Timeout: 30s, Topology Description: <TopologyDescription id: 600a2ad466cb301ea5d7cc3d, topology_type: Single, servers: [<ServerDescription ('mongodb', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('mongodb:27017: [Errno 11001] getaddrinfo failed')>]>

在谷歌上查了很久,终于意识到是我的hostname有问题,解决办法是把db_utils.py文件的“mongo_client”值改为

mongo_client = pymongo.MongoClient(host='mongodb://localhost')

使用上述方法逐个保存所有小号的信息,注意一次只能保存一个小号,不能把insert_cookie的参数改成列表来一次保存多个账号,否则会报错:

pymongo.errors.WriteError: can't use an array for _id, full error: {'index': 0, 'code': 2, 'errmsg': "can't use an array for _id"}

初始化Redis

这里笔者跳过了“添加代理IP”环节,直接初始化Redis。简单解释一下,这一步主要是用来确定你需要爬的信息,按照你的需要将代码

python redis_init.py <arg>

中的“< arg >”替换为相应参数值,可以选择的有user、fan、follow、comment、tweet_by_user_id、tweet_by_keyword。例如你想要依据某个微博用户的id来爬取用户的信息,就先将redis_init.py文件中init_user_spider函数的user_ids参数值替换为你要爬的用户id列表,然后在WeiboSpider-senior\weibospider目录下执行

python redis_init.py user

也可以在“user”后添加其他参数来一次初始化多个参数,如

python redis_init.py user fan follow comment tweet_by_user_id tweet_by_keyword

但如果不指定任何参数就会报错。
这里笔者直接运行了redis_init.py,却出现如下报错:

socket.gaierror: [Errno 11001] getaddrinfo failed
During handling of the above exception, another exception occurred:
redis.exceptions.ConnectionError: Error 11001 connecting to redis:6379. getaddrinfo failed.

再次查了很久,渐渐明白原来Redis也会一种数据库,需要先安装,教程可以参考这里。Redis默认hostname应为“127.0.0.1”,因此还需要将redis_init.py文件中redis_init函数的r值改为

r = redis.Redis(host='127.0.0.1')

之后再运行redis_init.py就可以正常初始化了。

运行爬虫

上述工作全部完成后,就可以运行爬虫了。同理,需要先将WeiboSpider-senior\weibospider\settings.py文件中的“REDIS_HOST”值改为
REDIS_HOST = ‘127.0.0.1’
然后在WeiboSpider-senior\weibospider目录下执行

python run_spider.py <arg>

其中“< arg >”与执行redis_init.py时同理,按需要替换为指定参数。
目前笔者正在进行这一步,但是貌似还是有问题,因为爬不到任何数据,全部是空页,即

[scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

后续如果找到解决办法再来更新吧~

参考文献

[1] https://github.com/nghuyong/WeiboSpider
[2] https://blog.csdn.net/weixin_41466575/article/details/105326230
[3] https://stackoverflow.com/questions/46041383/serverselectiontimeouterror-errno-11001-getaddrinfo-failed-python
[4] https://blog.csdn.net/hu1258123819/article/details/98788251
[5] https://www.cnblogs.com/liuqingzheng/p/9831331.html

微博scrapy爬虫实战经验分享相关推荐

  1. 图虫网、人人字幕Scrapy爬虫实战分享 附源码

    图虫网.人人字幕Scrapy爬虫实战分享 文章已发表在个人博客,欢迎点击这里访问 序 最近用Scrapy爬取了图虫和人人字幕,图虫网以前是纯摄影爱好论坛,现在往图库方向发展了,图片质量上佳,人人字幕也 ...

  2. 数据挖掘r语言和python知乎_Hellobi Live |R语言爬虫实战案例分享:网易云课堂、知乎live、今日头条、B站视频...

    课程名称 R语言爬虫实战案例分享:网易云课堂.知乎live.今日头条.B站视频 网络数据抓取是数据科学中获取数据中的重要途径,但是一直以来受制于高门槛,都是专业程序员的专属技能.直到R语言和Pytho ...

  3. 【实战经验分享】一劳永逸的解决网线随意热插拔问题

    [实战经验分享]一劳永逸的解决网线随意热插拔问题 参考文章: (1)[实战经验分享]一劳永逸的解决网线随意热插拔问题 (2)https://www.cnblogs.com/armfly/p/11818 ...

  4. 【线上直播】深度学习简介与落地实战经验分享

    分享嘉宾: 嘉宾简介: 郑泽宇,知衣科技联合创始人兼CEO,美国Carnegie Mellon University(CMU)硕士,畅销书<TensorFlow:实战Google深度学习框架&g ...

  5. RabbitMQ实战经验分享

    RabbitMQ实战经验分享 原文:RabbitMQ实战经验分享 前言 最近在忙一个高考项目,看着系统顺利完成了这次高考,终于可以松口气了.看到那些即将参加高考的学生,也想起当年高三的自己. 下面分享 ...

  6. Spring Cloud在云计算SaaS中的实战经验分享

    摘要 云帐房CTO张英磊基于自己的个人经验,分享Spring Cloud在云计算SaaS中的实战经验,希望能为大家带来一些思路上的帮助. 内容来源:2017年5月6日,云帐房CTO张英磊在" ...

  7. MongoDB实战经验分享

    2019独角兽企业重金招聘Python工程师标准>>> 转自: http://www.cnblogs.com/ymind/archive/2012/04/25/2470551.htm ...

  8. 基金知识汇总和实战经验分享

    基金知识汇总和实战经验分享 分享一份基金知识给大家,同时分享下个人观点: 引用PMP项目风险管理的经验,无论是玩基金还是股票都要清晰明确的认识到自身的风险承受力,通俗一点就是你最多能接受你投入的本钱亏 ...

  9. IT实施计划实战经验分享:避免失败

    我们在之前文章<IT实施计划实战经验分享:如何制定>中描述了如何针对企业新的业务项目制定高质量的IT实施计划,例如首先针对新应用的设计和发布开发成熟的模式和方法论来实施标准化的流程等等.本 ...

最新文章

  1. angular图片传到后台_告诉你,SpringBoot+Angular有多牛逼!
  2. 阿里巴巴机器学习系列课程
  3. CF183D-T-shirtx【dp,贪心】
  4. 云安全并非神话 五个源头严控把关
  5. JQ实现标签栏切换效果、导航栏下滑效果以及动画队列和stop()方法
  6. 鼠标移开事件(onmouseout)
  7. Vue3 + Typescript + Node.js 搭建elementUI使用环境
  8. C#不同操作系统下,界面大小不一的原因
  9. 机器学习平台的简单调研
  10. 财税打印机LQ 670K+ win10驱动
  11. 一个手握安兔兔,一个执掌鲁大师,周鸿祎雷军这场仗谁能赢?
  12. ARCGIS 给面文件“挖洞”——Erase的用法
  13. 多期DID和事件研究法含文献和do代码
  14. 强烈推荐一个有趣的数据分析神器~
  15. 前端JavaScript DOM BOM 自学复盘 D1(DOM-获取DOM元素、修改HTML标签/表单/css样式属性、定时器-间歇函数)
  16. 需求工程中的面谈和原型
  17. 一心多用多线程-线程的生命周期
  18. linux gcc strip命令简介
  19. 阿里云无影研发负责人任晋奎:无影核心技术能力突破,打造云网端融合的全新体验
  20. Bit(位)与Byte(字节)的区别

热门文章

  1. ouster-32激光雷达实测:ROS驱动编译使用与设备连接的网络配置
  2. Mac的Dock栏是什么?Mac Dock栏使用技巧
  3. 解决 虚拟机VMware Authorization Service未能启动的四种方法
  4. Libnet 1.1教程
  5. CentOS安装nvidia显卡驱动
  6. WEB和WAP有什么区别前端开发的趋势
  7. java 获取一天零点零分零秒时间戳
  8. 双11买的开发板,仪器,学电子的男生被优惠哭了。
  9. 易强商务邮件搜索王 v3.7 下载
  10. Python模拟校园网登录