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使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
python实现获取序列中最小的几个元素
Sep 25 Python
Python列表list数组array用法实例解析
Oct 28 Python
TensorFlow神经网络优化策略学习
Mar 09 Python
PyTorch学习笔记之回归实战
May 28 Python
numpy.where() 用法详解
May 27 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
python 二维矩阵转三维矩阵示例
Nov 30 Python
python3 tcp的粘包现象和解决办法解析
Dec 09 Python
pandas中read_csv的缺失值处理方式
Dec 19 Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 Python
Python利用FlashText算法实现替换字符串
Mar 31 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验证码函数的使用示例
2013/05/03 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
Python datetime时间格式化去掉前导0
2014/07/31 Python
python实现逆波兰计算表达式实例详解
2015/05/06 Python
老生常谈Python startswith()函数与endswith函数
2017/09/08 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
python+flask实现API的方法
2018/11/21 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
python程序变成软件的实操方法
2019/06/24 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
优秀应届生推荐信
2013/11/09 职场文书
英文自荐信
2013/12/15 职场文书
转党组织关系介绍信
2014/01/08 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
致运动员的广播稿
2015/08/19 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
一起来学习Python的元组和列表
2022/03/13 Python