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实现字符串匹配算法代码示例
Dec 05 Python
python 正确保留多位小数的实例
Jul 16 Python
python 随机打乱 图片和对应的标签方法
Dec 14 Python
python tkinter组件摆放方式详解
Sep 16 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
python将图片转base64,实现前端显示
Jan 09 Python
使用Django清空数据库并重新生成
Apr 03 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 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发送邮件类代码附详细说明
2008/07/10 PHP
PHP Session机制简介及用法
2014/08/19 PHP
jquery中获取select选中值的代码
2011/06/27 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
Python牛刀小试密码爆破
2011/02/03 Python
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
浅析Python基础-流程控制
2016/03/18 Python
使用python 3实现发送邮件功能
2018/06/15 Python
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
简单了解Python生成器是什么
2019/07/02 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
Python pip 常用命令汇总
2020/10/19 Python
美国在线印刷公司:PsPrint
2017/10/12 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
平面设计自荐信
2013/10/07 职场文书
质检部岗位职责
2013/11/11 职场文书
职工趣味运动会方案
2014/02/10 职场文书
答谢会策划方案
2014/05/12 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
餐厅开业活动方案
2019/07/08 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript