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 相关文章推荐
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
在Django中使用Sitemap的方法讲解
Jul 22 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
Python应用领域和就业形势分析总结
May 14 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
Python流程控制 if else实现解析
Sep 02 Python
python装饰器代替set get方法实例
Dec 19 Python
pytorch中的transforms模块实例详解
Dec 31 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
python生成并处理uuid的实现方式
Mar 03 Python
Python爬虫教程知识点总结
Oct 19 Python
python使用glob检索文件的操作
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
PHP 开发工具
2006/12/06 PHP
UCenter Home二次开发指南
2009/05/28 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
javascript处理table表格的代码
2010/12/06 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
javascript显示系统当前时间代码
2016/12/29 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
Python实现批量下载文件
2015/05/17 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
python学习笔记之多进程
2020/08/06 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
C++程序员求职信范文
2014/04/14 职场文书
电教室标语
2014/06/20 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
大学军训口号大全
2015/12/24 职场文书