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实现baidu hi自动登录的代码
Feb 10 Python
Python实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
Python 12306抢火车票脚本
Feb 07 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
在Python中COM口的调用方法
Jul 03 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
Python Socketserver实现FTP文件上传下载代码实例
Mar 27 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
PyTorch-GPU加速实例
Jun 23 Python
Linux系统下升级pip的完整步骤
Jan 31 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
javascript 数组操作详解
2015/01/29 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
Python实现的石头剪子布代码分享
2014/08/22 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
什么是python的函数体
2020/06/19 Python
python 6行代码制作月历生成器
2020/09/18 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
电话销售经理岗位职责
2013/12/07 职场文书
行政副总岗位职责
2014/02/23 职场文书
酒鬼酒广告词
2014/03/21 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript