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处理csv数据的方法
Mar 11 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
Jun 11 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
Python高阶函数、常用内置函数用法实例分析
Dec 26 Python
基于Pycharm加载多个项目过程图解
Jan 19 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
基于python实现操作git过程代码解析
Jul 27 Python
简单介绍Python的第三方库yaml
Jun 18 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图像处理类代码分享
2012/01/19 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
YII框架关联查询操作示例
2019/04/29 PHP
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
python正则表达式的使用
2017/06/12 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
日语翻译个人求职的自我评价
2013/10/14 职场文书
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
自我评价个人范文
2013/12/16 职场文书
青岛海底世界导游词
2015/02/11 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers
Android中View.post和Handler.post的关系
2022/06/05 Java/Android