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 初始化多维数组代码
Sep 06 Python
python实现的简单窗口倒计时界面实例
May 05 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 Python
python读写LMDB文件的方法
Jul 02 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
Restful_framework视图组件代码实例解析
Nov 17 Python
如何在 Matplotlib 中更改绘图背景的实现
Nov 26 Python
python 制作网站筛选工具(附源码)
Jan 21 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 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/10/09 PHP
使用URL传输SESSION信息
2015/07/14 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
jQuery遍历DOM元素与节点方法详解
2016/04/14 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
使用httplib模块来制作Python下HTTP客户端的方法
2015/06/19 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
python 链接和操作 memcache方法
2017/03/04 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
如何在python中执行另一个py文件
2020/04/30 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
外国语学院毕业生自荐信
2013/10/28 职场文书
小学科学教学反思
2014/01/26 职场文书
小学班主任评语大全
2014/04/23 职场文书
学习群众路线的心得体会
2014/11/05 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
故宫的导游词
2015/01/31 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
MySQL 覆盖索引的优点
2021/05/19 MySQL
MySQL通过binlog恢复数据
2021/05/27 MySQL