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程序中使用Cookie的教程
Apr 30 Python
简单介绍使用Python解析并修改XML文档的方法
Oct 15 Python
python基础教程项目二之画幅好画
Apr 02 Python
Python for循环生成列表的实例
Jun 15 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
django 类视图的使用方法详解
Jul 24 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
python中with语句结合上下文管理器操作详解
Dec 19 Python
tensorflow 查看梯度方式
Feb 04 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
Pandas加速代码之避免使用for循环
May 30 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中str_replace函数使用小结
2008/10/11 PHP
深入理解PHP内核(一)
2015/11/10 PHP
JavaScript OOP面向对象介绍
2010/12/02 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
JS中操作JSON总结
2020/12/06 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
python time模块用法实例详解
2014/09/11 Python
python如何使用unittest测试接口
2018/04/04 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
Python使用python-docx读写word文档
2019/08/26 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
美国Max仓库:Max Warehouse
2020/05/31 全球购物
教师实习自我鉴定
2013/12/13 职场文书
公司新员工的演讲稿注意事项
2014/01/01 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
小学生安全演讲稿
2014/04/25 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
个人查摆剖析材料
2014/10/04 职场文书
交通事故协议书范文
2014/10/23 职场文书
学生上课说话检讨书
2014/10/25 职场文书
工人先进事迹材料
2014/12/26 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python