专栏首页机器学习AI算法工程微博python爬虫,每日百万级数据

微博python爬虫,每日百万级数据

新浪微博绝对是一个巨大的,实时的语料库!对微博数据爬取和分析,有重大的意义。 比如,现在要调查工商银行的服务态度,就可以抓取微博内容中包含工商银行的微博语料,然后做情感分析,就可以得到用户对银行服务的满意程度。

再比如,最近火热的明星鹿晗,可以抓取鹿晗的粉丝信息,分析这些粉丝处于什么年龄段,有什么标签,爱好,性别分布等等。这种对人群的分析,还可以同理应用到商业品牌上,用用户市场调研。

当然例子还有很多,那么,首先,要有微博数据!

所以,就产生了众多的微博爬虫项目。后来,新浪微博也开放了微博的API接口,但是官方的东西,限制还是很多的。

http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI

准备工作

User-Agent池

爬微博,这种大项目,必要充分的伪装是必须的,所以需要一个User-Agent池,每次,随机选择一个User-Agent。

我整理的在这里:User-Agent池

本文源码地址:

关注微信公众号datayx 然后回复“微博”即可获取。

充足的微博账号

微博爬虫,必须登录以后,才能抓取。而一直使用一个账号,是很容易被封号的!

所以,需要多准备几个账号,每次随机选择一个账号登录,进行抓取。(实际是随机选择一个cookie)。

至于买微博账号的地方,某宝就有:

充足的IP代理

如果你想很快的进行抓取,延迟为0的话,IP很快就会被封,返回403 Forbidden。这时候就需要换代理,所以需要有一个IP代理池,这个具体可以参见我的另一个项目:构建爬虫代理池

http://blog.nghuyong.top/2017/10/19/spider/%E6%9E%84%E5%BB%BA%E7%88%AC%E8%99%AB%E4%BB%A3%E7%90%86%E6%B1%A0/

当然,经测试,每次访问延迟为0.5s,并发量为32,这个参数是不会被封的!

一个服务器

其实,如果IP代理,是免费抓取来的,通常质量并不好,通过代理访问延迟会很大!所以,不如不用代理,加一个0.5秒的延迟,慢慢爬。

这时候,就需要一个勤劳的爬虫,24小时不间断的爬数据!

所以当然是需要部署在服务器上!

爬虫策略

登录微博

登录一直是一个很复杂的问题,不过,我们可以通过selenium来简化这个问题。 直接通过selenium编写浏览器的脚本,自动打开微博的手机站,点击登录,在输入框中填充账号,密码,再点击登录。最后返回cookie即可。

获取cookie以后,可以保存到数据库中。以后每次request请求,随机从数据库中选一个cookie加上,就免登录了。

抓取方案

  1. 首先选择一个(或多个)种子用户,作为最初抓取的对象。
  2. 对于每个抓取对象,依次抓取个人信息,所有的微博,还有粉丝列表和关注列表。
  3. 将对象的粉丝列表和关注列表中的用户,再加入到抓取对象中去。以此循环。

这样就可以形成以种子用户为核心,逐层向外扩散的爬虫辐射。

理论上,只要一小批种子用户启动,就可以爬取全网的微博!

大V的过滤

事实上,有很多微博的信息是没有营养的,比如一些恶俗的营销号,或者一些明星的微博账号。所以,我们可以给抓取的对象,加一个比较正常的阈值,也就是一个普通用户的情况:微博数量<5000,粉丝<5000,关注<5000.

Scrapy配置

  • MiddleWare:随机User-Agent和随机Cookie
  • Mongodb:网络爬虫,数据项进场会出现不全,格式不统一的状况,所以采用Mongodb较为合适
  • DOWNLOAD_DELAY = 0.5 下载间隔时间设置为0.5
  • CONCURRENT_REQUESTS = 32 并发下载量为32
  • LOG_FILE = weibo.log 采用日志文件记录日志

全部代码

本文源码地址:

关注微信公众号datayx 然后回复“微博”即可获取。

运行环境为:Python3

需要依赖包括:pymogo,scrapy

部署服务器,Run!

服务器安装Mongodb,并开放外网访问权限

具体可以参考:ubuntu下部署mongodb以及设置允许远程连接

http://www.cnblogs.com/HaoPengZhang/p/5722603.html

这样配置以后,在本地Pycharm中,配置远端数据库,就实现可视化操作与管理。

运行爬虫

克隆代码到服务器中,安装依赖,并执行

nohup python run.py

就已经开始不停的爬取微博了!

通过命令:tail -10 weibo.log 查看最新的日志。

在日志中,查看爬取速度:

可以看到一分钟,可以抓取848个item(数据项),这样一天下来:

848*60*24=1221120 可以抓取120万的微博数据!!

而且是在服务器上运行,可以源源不断的抓取!

同时在本地,通过Mongodb可视化工具,连接并查看数据库。

通过简单的count统计,抓取数量:

可以看到至此已经抓取1.8k用户信息,2.7w微博语料,8.2w分析关系信息。

本文分享自微信公众号 - 机器学习AI算法工程(datayx)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • "我们做的微博数据挖掘"

    作者:数控小V http://www.36dsj.com/archives/48650 新浪微博在2012年-2013年红得发紫,也是移动互联网快速成长的年...

    机器学习AI算法工程
  • 基于Hadoop 的分布式网络爬虫技术

    一、网络爬虫原理 Web网络爬虫系统的功能是下载网页数据,为搜索引擎系统提供数据来源。很多大型的网络搜索引擎系统都被称为基于 Web数据采集的搜索引擎系统,比如...

    机器学习AI算法工程
  • 对美食评语进行情感分析

    Yelp Reviews是Yelp为了学习目的而发布的一个开源数据集。它包含了由数百万用户评论,商业属性和来自多个大都市地区的超过20万张照片。这是一个常用的全...

    机器学习AI算法工程
  • Python 数据库操作 SQLAlchemy

    在运行过程中所有的的数据都存储在内存 (RAM) 中,「RAM 是易失性存储器,系统掉电后 RAM 中的所有数据将全部丢失」。在大多数情况下我们希望程序运行中产...

    keinYe
  • 小程序云开发模糊查询,实现数据库多字段的模糊搜索

    上图只可以实现time字段的模糊搜索。但是我们如果相对数据表里的多个字段做模糊查询呢?该怎么办呢。

    编程小石头
  • python flask web开发实战 Jinja2模板

    templates/index.html <h1>Hello World!</h1> templates/user.html <h1>Hello, {{ ...

    用户5760343
  • 移动端开发脱坑指南

    杨肆月
  • 出门问问优雅智造:看人工智能产品如何“软硬结合”

    【新智元导读】出门问问举行“优雅智造”为主题的跨界新品发布会,推出搭载Ticwear 4.0智能手表操作系统的问问手表Ticwatch 2、可穿戴移动支付Tic...

    新智元
  • 数据压缩和归档(三)、tarfile

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    于小勇
  • Swift3.0 - 类和结构体的区别

    结论: 在数据量比较大的排序中,结构体排序的速度比较慢,因为结构体是值类型,排序的时候,需要大量的赋值运算。而对象只需要交换地址即可。

    酷走天涯

扫码关注云+社区

领取腾讯云代金券