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 代码性能优化技巧分享
Aug 07 Python
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
python使用BeautifulSoup分析网页信息的方法
Apr 04 Python
python实现K最近邻算法
Jan 29 Python
python 获取当天凌晨零点的时间戳方法
May 22 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
Django实现auth模块下的登录注册与注销功能
Oct 10 Python
python用requests实现http请求代码实例
Oct 31 Python
使用Python爬取小姐姐图片(beautifulsoup法)
Feb 11 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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 大数据量及海量数据处理算法总结
2011/05/07 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
js 单引号 传递方法
2009/06/22 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
python logging添加filter教程
2019/12/24 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
初中女生自我鉴定
2013/12/19 职场文书
留学自荐信写作方法
2014/01/27 职场文书
法律进机关实施方案
2014/03/12 职场文书
保安公司服务承诺书
2014/05/28 职场文书
专项法律服务方案
2014/06/11 职场文书
社区文艺活动方案
2014/08/19 职场文书
宣传委员竞选稿
2015/11/19 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python
Go web入门Go pongo2模板引擎
2022/05/20 Golang