Python selenium抓取微博内容的示例代码


Posted in Python onMay 17, 2018

Selenium简介与安装

Selenium是什么?

Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。

安装

直接使用pip命令安装即可!

pip install selenium

Python抓取微博有两种方式,一是通过selenium自动登录后从页面直接爬取,二是通过api。

这里采用selenium的方式。

程序:

from selenium import webdriver
import time
import re
#全局变量
driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")

def loginWeibo(username, password):
  driver.get('https://passport.weibo.cn/signin/login')
  time.sleep(1)

  driver.find_element_by_id("loginName").send_keys("haishu_zheng@163.com")
  driver.find_element_by_id("loginPassword").send_keys("Weibo01061122")

  time.sleep(1)
  driver.find_element_by_id("loginAction").click()

  #driver.close()
  
def visitUserPage(userId):
  driver.get('http://weibo.cn/' + userId)

  print('********************')  
  print('用户资料')
  
  # 1.用户id
  print('用户id:' + userId)
  
  # 2.用户昵称
  strName = driver.find_element_by_xpath("//div[@class='ut']")
  strlist = strName.text.split(' ')
  nickname = strlist[0]
  print('昵称:' + nickname)
  
  # 3.微博数、粉丝数、关注数
  strCnt = driver.find_element_by_xpath("//div[@class='tip2']")
  pattern = r"\d+\.?\d*" # 匹配数字,包含整数和小数
  cntArr = re.findall(pattern, strCnt.text)
  print(strCnt.text)
  print("微博数:" + str(cntArr[0]))
  print("关注数:" + str(cntArr[1]))
  print("粉丝数:" + str(cntArr[2]))
  
  print('\n********************')
  # 4.将用户信息写到文件里
  with open("weibo.txt", "w", encoding = "gb18030") as file:
    file.write("用户ID:" + userId + '\r\n')
    file.write("昵称:" + nickname + '\r\n')
    file.write("微博数:" + str(cntArr[0]) + '\r\n')
    file.write("关注数:" + str(cntArr[1]) + '\r\n')
    file.write("粉丝数:" + str(cntArr[2]) + '\r\n')
    
  # 5.获取微博内容
  # http://weibo.cn/ + userId + ? filter=0&page=1
  # filter为0表示全部,为1表示原创
  print("微博内容")
  
  pageList = driver.find_element_by_xpath("//div[@class='pa']")
  print(pageList.text)
  pattern = r"\d+\d*"     # 匹配数字,只包含整数
  pageArr = re.findall(pattern, pageList.text)
  totalPages = pageArr[1]   # 总共有多少页微博
  print(totalPages)
  
  pageNum = 1     # 第几页
  numInCurPage = 1      # 当前页的第几条微博内容
  contentPath = "//div[@class='c'][{0}]"
  while(pageNum <= 3):  
  #while(pageNum <= int(totalPages)):
    contentUrl = "http://weibo.cn/" + userId + "?filter=0&page=" + str(pageNum)
    driver.get(contentUrl)
    content = driver.find_element_by_xpath(contentPath.format(numInCurPage)).text
    # print("\n" + content) # 微博内容,包含原创和转发
    if "设置:皮肤.图片.条数.隐私" not in content:
      numInCurPage += 1
      with open("weibo.txt", "a", encoding = "gb18030") as file:
        file.write("\r\n" + "\r\n" + content)  # 将微博内容逐条写到weibo.txt中
    else:
      pageNum += 1            # 抓取新一页的内容
      numInCurPage = 1          # 每一页都是从第1条开始抓    
    
if __name__ == '__main__':
  username = 'haishu_zheng@163.com'  # 输入微博账号
  password = 'Weibo01061122'     # 输入密码
  loginWeibo(username, password)   # 要先登录,否则抓取不了微博内容
  time.sleep(3)
  uid = 'xywyw'            # 寻医问药
  visitUserPage(uid)

运行结果:

Python selenium抓取微博内容的示例代码

同时还生成了weibo.txt文件,内容如下

Python selenium抓取微博内容的示例代码

这种方法有个缺陷,就是爬取较多内容会被封IP:

Python selenium抓取微博内容的示例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单介绍Python中的round()方法
May 15 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
查看django版本的方法分享
May 14 Python
Python中collections模块的基本使用教程
Dec 07 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
深入了解Python 方法之类方法 &amp; 静态方法
Aug 17 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 #Python
Python实现读取txt文件并转换为excel的方法示例
May 17 #Python
cmd运行python文件时对结果进行保存的方法
May 16 #Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 #Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 #Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 #Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
May 16 #Python
You might like
php中存储用户ID和密码到mysql数据库的方法
2013/02/06 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
Python中zip()函数用法实例教程
2014/07/31 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
python内存管理机制原理详解
2019/08/12 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
用Python写一个自动木马程序
2019/09/17 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
pytorch实现查看当前学习率
2020/06/24 Python
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
医学专业自荐信
2014/06/14 职场文书
爱国口号
2014/06/19 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
通知函的格式
2015/04/27 职场文书
个人求职意向书
2015/05/11 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript