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写的图片蜘蛛人代码
Aug 27 Python
Python中optionParser模块的使用方法实例教程
Aug 29 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
python程序封装为win32服务的方法
Mar 07 Python
在pycharm中设置显示行数的方法
Jan 16 Python
python统计指定目录内文件的代码行数
Sep 19 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
keras实现图像预处理并生成一个generator的案例
Jun 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编写PDF文档生成器
2006/10/09 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
Js获取事件对象代码
2010/08/05 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
详解react内联样式使用webpack将px转rem
2018/09/13 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
Python实现截屏的函数
2015/07/26 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
python openCV自制绘画板
2020/10/27 Python
python 实现超级玛丽游戏
2020/11/25 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
物理教师自荐信范文
2013/12/28 职场文书
宣传普通话标语
2014/06/27 职场文书
社区两委对照检查材料
2014/08/23 职场文书
六年级学生期末评语
2014/12/26 职场文书
表扬稿范文
2015/01/17 职场文书
2016年端午节寄语
2015/12/04 职场文书
庭外和解协议书
2016/03/23 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
python全面解析接口返回数据
2022/02/12 Python