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 28 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
python根据多个文件名批量查找文件
Aug 13 Python
python实现证件照换底功能
Aug 20 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
Python如何执行精确的浮点数运算
Jul 31 Python
Python基于template实现字符串替换
Nov 27 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中CI操作多个数据库的代码
2012/07/05 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
php格式化金额函数分享
2015/02/02 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
javascript数组去掉重复
2011/05/12 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
分享20个提升网站界面体验的jQuery插件
2014/12/15 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
jQuery实现增删改查
2020/12/22 jQuery
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
大学应届毕业生个人求职信
2013/09/23 职场文书
会计系个人求职信范文分享
2013/12/20 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
公司经营目标责任书
2015/01/29 职场文书
聘任证明怎么写
2015/03/02 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
关于感恩的作文
2019/08/26 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python