Python爬虫爬取新浪微博内容示例【基于代理IP】


Posted in Python onAugust 03, 2018

本文实例讲述了Python爬虫爬取新浪微博内容。分享给大家供大家参考,具体如下:

用Python编写爬虫,爬取微博大V的微博内容,本文以女神的微博为例(爬新浪m站:https://m.weibo.cn/u/1259110474

一般做爬虫爬取网站,首选的都是m站,其次是wap站,最后考虑PC站。当然,这不是绝对的,有的时候PC站的信息最全,而你又恰好需要全部的信息,那么PC站是你的首选。一般m站都以m开头后接域名, 所以本文开搞的网址就是 m.weibo.cn。

前期准备

1.代理IP

网上有很多免费代理ip,如西刺免费代理IPhttp://www.xicidaili.com/,自己可找一个可以使用的进行测试;

2.抓包分析

通过抓包获取微博内容地址,这里不再细说,不明白的小伙伴可以自行百度查找相关资料,下面直接上完整的代码

完整代码:

# -*- coding: utf-8 -*-
import urllib.request
import json
#定义要爬取的微博大V的微博ID
id='1259110474'
#设置代理IP
proxy_addr="122.241.72.191:808"
#定义页面打开函数
def use_proxy(url,proxy_addr):
  req=urllib.request.Request(url)
  req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")
  proxy=urllib.request.ProxyHandler({'http':proxy_addr})
  opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
  urllib.request.install_opener(opener)
  data=urllib.request.urlopen(req).read().decode('utf-8','ignore')
  return data
#获取微博主页的containerid,爬取微博内容时需要此id
def get_containerid(url):
  data=use_proxy(url,proxy_addr)
  content=json.loads(data).get('data')
  for data in content.get('tabsInfo').get('tabs'):
    if(data.get('tab_type')=='weibo'):
      containerid=data.get('containerid')
  return containerid
#获取微博大V账号的用户基本信息,如:微博昵称、微博地址、微博头像、关注人数、粉丝数、性别、等级等
def get_userInfo(id):
  url='https://m.weibo.cn/api/container/getIndex?type=uid&value='+id
  data=use_proxy(url,proxy_addr)
  content=json.loads(data).get('data')
  profile_image_url=content.get('userInfo').get('profile_image_url')
  description=content.get('userInfo').get('description')
  profile_url=content.get('userInfo').get('profile_url')
  verified=content.get('userInfo').get('verified')
  guanzhu=content.get('userInfo').get('follow_count')
  name=content.get('userInfo').get('screen_name')
  fensi=content.get('userInfo').get('followers_count')
  gender=content.get('userInfo').get('gender')
  urank=content.get('userInfo').get('urank')
  print("微博昵称:"+name+"\n"+"微博主页地址:"+profile_url+"\n"+"微博头像地址:"+profile_image_url+"\n"+"是否认证:"+str(verified)+"\n"+"微博说明:"+description+"\n"+"关注人数:"+str(guanzhu)+"\n"+"粉丝数:"+str(fensi)+"\n"+"性别:"+gender+"\n"+"微博等级:"+str(urank)+"\n")
#获取微博内容信息,并保存到文本中,内容包括:每条微博的内容、微博详情页面地址、点赞数、评论数、转发数等
def get_weibo(id,file):
  i=1
  while True:
    url='https://m.weibo.cn/api/container/getIndex?type=uid&value='+id
    weibo_url='https://m.weibo.cn/api/container/getIndex?type=uid&value='+id+'&containerid='+get_containerid(url)+'&page='+str(i)
    try:
      data=use_proxy(weibo_url,proxy_addr)
      content=json.loads(data).get('data')
      cards=content.get('cards')
      if(len(cards)>0):
        for j in range(len(cards)):
          print("-----正在爬取第"+str(i)+"页,第"+str(j)+"条微博------")
          card_type=cards[j].get('card_type')
          if(card_type==9):
            mblog=cards[j].get('mblog')
            attitudes_count=mblog.get('attitudes_count')
            comments_count=mblog.get('comments_count')
            created_at=mblog.get('created_at')
            reposts_count=mblog.get('reposts_count')
            scheme=cards[j].get('scheme')
            text=mblog.get('text')
            with open(file,'a',encoding='utf-8') as fh:
              fh.write("----第"+str(i)+"页,第"+str(j)+"条微博----"+"\n")
              fh.write("微博地址:"+str(scheme)+"\n"+"发布时间:"+str(created_at)+"\n"+"微博内容:"+text+"\n"+"点赞数:"+str(attitudes_count)+"\n"+"评论数:"+str(comments_count)+"\n"+"转发数:"+str(reposts_count)+"\n")
        i+=1
      else:
        break
    except Exception as e:
      print(e)
      pass
if __name__=="__main__":
  file=id+".txt"
  get_userInfo(id)
  get_weibo(id,file)

爬取结果

Python爬虫爬取新浪微博内容示例【基于代理IP】

Python爬虫爬取新浪微博内容示例【基于代理IP】

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
python实现画圆功能
Jan 25 Python
对命令行模式与python交互模式介绍
May 12 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
Python发展史及网络爬虫
Jun 19 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
Pycharm打开已有项目配置python环境的方法
Jul 03 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 Python
Python实现DBSCAN聚类算法并样例测试
Jun 22 Python
OpenCV+python手势识别框架和实例讲解
Aug 03 #Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 #Python
Python测试网络连通性示例【基于ping】
Aug 03 #Python
python版opencv摄像头人脸实时检测方法
Aug 03 #Python
python 读取摄像头数据并保存的实例
Aug 03 #Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 #Python
python调用摄像头显示图像的实例
Aug 03 #Python
You might like
php配合jquery实现增删操作具体实例
2013/12/12 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
vue实现评论列表功能
2019/10/25 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python编码时应该注意的几个情况
2013/03/04 Python
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
跟老齐学Python之集合(set)
2014/09/24 Python
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
京东国际站:JOYBUY
2017/11/23 全球购物
营销总经理岗位职责
2014/02/02 职场文书
高中语文课后反思
2014/04/27 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python