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 相关文章推荐
在MAC上搭建python数据分析开发环境
Jan 26 Python
详解Python中的from..import绝对导入语句
Jun 21 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 Python
使用Python & Flask 实现RESTful Web API的实例
Sep 19 Python
python清理子进程机制剖析
Nov 23 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
Dec 12 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
Python 操作SQLite数据库的示例
Oct 16 Python
Python urlopen()参数代码示例解析
Dec 10 Python
使用numpy nonzero 找出非0元素
May 14 Python
Python pyecharts绘制条形图详解
Apr 02 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
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
php学习之变量的使用
2011/05/29 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
JavaScript实现简单轮播图效果
2018/12/01 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
pygame实现非图片按钮效果
2019/10/29 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
护理学应聘自荐书范文
2014/02/05 职场文书
愚人节活动策划方案
2014/03/11 职场文书
家长对老师的感言
2014/03/11 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
《长征》教学反思
2014/04/27 职场文书
党员群众路线承诺书
2014/05/20 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
十八大宣传标语
2014/10/09 职场文书
幼师辞职信怎么写
2015/02/27 职场文书
安全守法证明
2015/06/23 职场文书
红与黑读书笔记
2015/06/29 职场文书
预备党员入党感言
2015/08/01 职场文书
nginx配置虚拟主机的详细步骤
2021/07/21 Servers