已经构建了每日亿级的微博全网用户采集,千万级微博用户资料和上亿微博语料数据,戳这里全网微博数据每日亿级实时采集
已经实现了稳定了每日千万级别的微博抓取系统,戳这里微博爬虫,单机每日千万级的数据 && 吐血整理的微博爬虫总结
开源代码戳这里https://github.com/nghuyong/WeiboSpider,欢迎给个star,谢谢!
已经整理好的千万级微博语料,需要的戳这里
新浪微博绝对是一个巨大的,实时的语料库!对微博数据爬取和分析,有重大的意义。
比如,现在要调查工商银行的服务态度,就可以抓取微博内容中包含工商银行的微博语料,然后做情感分析,就可以得到用户对银行服务的满意程度。
再比如,最近火热的明星鹿晗,可以抓取鹿晗的粉丝信息,分析这些粉丝处于什么年龄段,有什么标签,爱好,性别分布等等。这种对人群的分析,还可以同理应用到商业品牌上,用用户市场调研。
当然例子还有很多,那么,首先,要有微博数据!
所以,就产生了众多的微博爬虫项目。后来,新浪微博也开放了微博的API接口,但是官方的东西,限制还是很多的。
爬微博,这种大项目,必要充分的伪装是必须的,所以需要一个User-Agent池,每次,随机选择一个User-Agent。
我整理的在这里:User-Agent池
微博爬虫,必须登录以后,才能抓取。而一直使用一个账号,是很容易被封号的!
所以,需要多准备几个账号,每次随机选择一个账号登录,进行抓取。(实际是随机选择一个cookie)。
至于买微博账号的地方,某宝就有:
如果你想很快的进行抓取,延迟为0的话,IP很快就会被封,返回403 Forbidden。这时候就需要换代理,所以需要有一个IP代理池,这个具体可以参见我的另一个项目:构建爬虫代理池
当然,经测试,每次访问延迟为0.5s,并发量为32,这个参数是不会被封的!
其实,如果IP代理,是免费抓取来的,通常质量并不好,通过代理访问延迟会很大!所以,不如不用代理,加一个0.5秒的延迟,慢慢爬。
这时候,就需要一个勤劳的爬虫,24小时不间断的爬数据!
所以当然是需要部署在服务器上!
登录一直是一个很复杂的问题,不过,我们可以通过selenium来简化这个问题。
直接通过selenium编写浏览器的脚本,自动打开微博的手机站,点击登录,在输入框中填充账号,密码,再点击登录。最后返回cookie即可。
def get_cookie_from_weibo(username, password):
driver = webdriver.Chrome()
driver.get('https://weibo.cn')
assert "微博" in driver.title
login_link = driver.find_element_by_link_text('登录')
ActionChains(driver).move_to_element(login_link).click().perform()
login_name = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "loginName"))
)
login_password = driver.find_element_by_id("loginPassword")
login_name.send_keys(username)
login_password.send_keys(password)
login_button = driver.find_element_by_id("loginAction")
login_button.click()
cookie = driver.get_cookies()
driver.close()
return cookie
获取cookie以后,可以保存到数据库中。以后每次request请求,随机从数据库中选一个cookie加上,就免登录了。
这样就可以形成以种子用户为核心,逐层向外扩散的爬虫辐射。
理论上,只要一小批种子用户启动,就可以爬取全网的微博!
事实上,有很多微博的信息是没有营养的,比如一些恶俗的营销号,或者一些明星的微博账号。所以,我们可以给抓取的对象,加一个比较正常的阈值,也就是一个普通用户的情况:微博数量<5000,粉丝<5000,关注<5000.
WeiboSpider
运行环境为:Python3
需要依赖包括:pymogo,scrapy
欢迎Star/Fork
具体可以参考:ubuntu下部署mongodb以及设置允许远程连接
这样配置以后,在本地Pycharm中,配置远端数据库,就实现可视化操作与管理。
克隆代码到服务器中,安装依赖,并执行
nohup python run.py
就已经开始不停的爬取微博了!
通过命令:tail -10 weibo.log
查看最新的日志。
在日志中,查看爬取速度:
可以看到一分钟,可以抓取848个item(数据项),这样一天下来:
848*60*24=1221120 可以抓取120万的微博数据!!
而且是在服务器上运行,可以源源不断的抓取!
同时在本地,通过Mongodb可视化工具,连接并查看数据库。
通过简单的count统计,抓取数量:
可以看到至此已经抓取1.8k用户信息,2.7w微博语料,8.2w分析关系信息。
如果对此有疑问,欢迎同我交流:[email protected]