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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
python实现自动重启本程序的方法
Jul 09 Python
Python下的常用下载安装工具pip的安装方法
Nov 13 Python
Python学生成绩管理系统简洁版
Apr 05 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
python判断输入日期为第几天的实例
Nov 13 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
python操作yaml说明
Apr 08 Python
python中取绝对值简单方法总结
Jul 24 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
python 基于selectors库实现文件上传与下载
Dec 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
推荐一篇入门级的Class文章
2007/03/19 PHP
PHP 编写的 25个游戏脚本
2009/05/11 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
js实现二级导航功能
2017/03/03 Javascript
Node.js简单入门前传
2017/08/21 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
Python实现的石头剪子布代码分享
2014/08/22 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
容易被忽略的Python内置类型
2020/09/03 Python
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
社区春季防火方案
2014/06/02 职场文书
具结保证书
2015/01/17 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python