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生成pdf文件的方法
Aug 04 Python
Python多线程同步Lock、RLock、Semaphore、Event实例
Nov 21 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
python多进程实现进程间通信实例
Nov 24 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
python文本数据处理学习笔记详解
Jun 17 Python
python对文件目录的操作方法实例总结
Jun 24 Python
django表单的Widgets使用详解
Jul 22 Python
Django REST framework 单元测试实例解析
Nov 07 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
python标准库OS模块详解
Mar 10 Python
django为Form生成的label标签添加class方式
May 20 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
星际原理概述
2020/03/04 星际争霸
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
js 操作符实例代码
2009/10/24 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
jQuery使用方法
2017/02/04 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
用js编写留言板
2020/03/17 Javascript
详解JS预解析原理
2020/06/16 Javascript
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
python and or用法详解
2019/06/26 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
中海讯通笔试题
2015/09/15 面试题
护理自荐信范文
2013/10/05 职场文书
大学生怎样进行自我评价
2013/12/07 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
公务员个人考察材料
2014/12/23 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python
python可视化之颜色映射详解
2021/09/15 Python
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript
Redis keys命令的具体使用
2022/06/05 Redis
Redis实现分布式锁的五种方法详解
2022/06/14 Redis