Python selenium爬取微博数据代码实例


Posted in Python onMay 22, 2020

爬取某人的微博数据,把某人所有时间段的微博数据都爬下来。

具体思路:

创建driver-----get网页----找到并提取信息-----保存csv----翻页----get网页(开始循环)----...----没有“下一页”就结束,

用了while True,没用自我调用函数

嘟大海的微博:https://weibo.com/u/1623915527

办公室小野的微博:https://weibo.com/bgsxy

代码如下

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import csv
import os
import time
 
#只有这2个参数设置,想爬谁的微博数据就在这里改地址和目标csv名称就行
weibo_url = 'https://weibo.com/bgsxy?profile_ftype=1&is_all=1#_0'
csv_name = 'bgsxy_allweibo.csv'
 
def start_chrome():
  print('开始创建浏览器')
  driver = webdriver.Chrome(executable_path='C:/Users/lori/Desktop/python52project/chromedriver_win32/chromedriver.exe')
  driver.start_client()
  return driver
 
def get_web(url):   #获取网页,并下拉到最底部
  print('开始打开指定网页')
  driver.get(url)
  time.sleep(7)
  scoll_down()
  time.sleep(5)
 
def scoll_down():  # 滚轮下拉到最底部
  html_page = driver.find_element_by_tag_name('html')
  for i in range(7):
    print(i)
    html_page.send_keys(Keys.END)
    time.sleep(1)
 
def get_data():
  print('开始查找并提取数据')
  card_sel = 'div.WB_cardwrap.WB_feed_type'
  time_sel = 'a.S_txt2[node-type="feed_list_item_date"]'
  source_sel = 'a.S_txt2[suda-uatrack="key=profile_feed&value=pubfrom_guest"]'
  content_sel = 'div.WB_text.W_f14'
  interact_sel = 'span.line.S_line1>span>em:nth-child(2)'
 
  cards = driver.find_elements_by_css_selector(card_sel)
  info_list = []
 
  for card in cards:
    time = card.find_elements_by_css_selector(time_sel)[0].text #虽然有可能在一个card中有2个time元素,我们取第一个就对
    if card.find_elements_by_css_selector(source_sel):
      source = card.find_elements_by_css_selector(source_sel)[0].text
    else:
      source = ''
    content = card.find_elements_by_css_selector(content_sel)[0].text
    link = card.find_elements_by_css_selector(time_sel)[0].get_attribute('href')
    trans = card.find_elements_by_css_selector(interact_sel)[1].text
    comment = card.find_elements_by_css_selector(interact_sel)[2].text
    like = card.find_elements_by_css_selector(interact_sel)[3].text
    info_list.append([time,source,content,link,trans,comment,like])
 
  return info_list
 
def save_csv(info_list,csv_name):
  csv_path = './' + csv_name
  print('开始写入csv文件')
  if os.path.exists(csv_path):
    with open(csv_path,'a',newline='',encoding='utf-8-sig') as f: #newline=''避免空行;encoding='utf-8-sig'比utf8牛,保存中文没问题
      writer = csv.writer(f)
      writer.writerows(info_list)
  else:
    with open(csv_path,'w+',newline='',encoding='utf-8-sig') as f:
      writer = csv.writer(f)
      writer.writerow(['发布时间','来源','内容','链接','转发数','评论数','点赞数'])
      writer.writerows(info_list)
  time.sleep(5)
 
def next_page_url():
  next_page_sel = 'a.page.next'
  next_page_ele = driver.find_elements_by_css_selector(next_page_sel)
  if next_page_ele:
    return next_page_ele[0].get_attribute('href')
  else:
    return None
 
 
driver = start_chrome()
input('请在chrome中登录weibo.com')   # 暂停程序,手动登录weibo.com
 
while True:
  get_web(weibo_url)
  info_list = get_data()
  save_csv(info_list,csv_name)
  if next_page_url():
    weibo_url = next_page_url()
  else:
    print('爬取结束')
    break

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中lambda的用法及其与def的区别解析
Jul 28 Python
详解Django缓存处理中Vary头部的使用
Jul 24 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
python删除服务器文件代码示例
Feb 09 Python
Python之lambda匿名函数及map和filter的用法
Mar 05 Python
详解python之heapq模块及排序操作
Apr 04 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
Python + Flask 实现简单的验证码系统
Oct 01 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
python实现文法左递归的消除方法
May 22 #Python
使用Django搭建网站实现商品分页功能
May 22 #Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 #Python
Python实现发票自动校核微信机器人的方法
May 22 #Python
基于django micro搭建网站实现加水印功能
May 22 #Python
基于Tensorflow一维卷积用法详解
May 22 #Python
Python参数传递机制传值和传引用原理详解
May 22 #Python
You might like
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
PHP强制转化的形式整理
2020/05/22 PHP
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
javascript基础知识讲解
2017/01/11 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
python中os操作文件及文件路径实例汇总
2015/01/15 Python
python数组复制拷贝的实现方法
2015/06/09 Python
Fabric 应用案例
2016/08/28 Python
python 网络编程常用代码段
2016/08/28 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
Python列表切片常用操作实例解析
2020/03/10 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
小学生秋游活动方案
2014/02/23 职场文书
yy婚礼主持词
2014/03/14 职场文书
我的求职择业计划书
2014/04/04 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
2015年物业管理工作总结
2015/04/23 职场文书