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抓取网页内容示例分享
Feb 24 Python
python实现数据图表
Jul 29 Python
Python实现的生成格雷码功能示例
Jan 24 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
Python之修改图片像素值的方法
Jul 03 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
Python编写打字训练小程序
Sep 26 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
Apr 22 Python
keras之权重初始化方式
May 21 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
Python 内存管理机制全面分析
Jan 16 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 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实现对两个数组进行减法操作的方法
2015/04/17 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
Python中input与raw_input 之间的比较
2017/08/20 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
Internet体系结构
2014/12/21 面试题
中学自我评价
2014/01/31 职场文书
银行求职自荐信
2014/06/30 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
物业接待员岗位职责
2015/04/15 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫