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实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python切片索引用法示例
May 15 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
自学python的建议和周期预算
Jan 30 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
Flask配置Cors跨域的实现
Jul 12 Python
利用python计算时间差(返回天数)
Sep 07 Python
Python3实现飞机大战游戏
Apr 24 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
python爬虫破解字体加密案例详解
Mar 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
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
php常量详细解析
2015/10/27 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
2016/07/18 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
python和C语言混合编程实例
2014/06/04 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
pytorch 修改预训练model实例
2020/01/18 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
美国Max仓库:Max Warehouse
2020/05/31 全球购物
幼儿园美术教学反思
2014/01/31 职场文书
英语国培研修感言
2014/02/13 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
财政局个人总结
2015/03/04 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书
python中的被动信息搜集
2021/04/29 Python
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript