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进程的信号通讯
Apr 09 Python
python虚拟环境的安装配置图文教程
Oct 20 Python
tensorflow构建BP神经网络的方法
Mar 12 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
基于python实现KNN分类算法
Apr 23 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
关于Django Models CharField 参数说明
Mar 31 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
什么是Python包的循环导入
Sep 08 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完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
preg_match_all使用心得分享
2014/01/31 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
2016/12/25 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
JS获取当前地理位置的方法
2017/10/25 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
python搭建简易服务器分析与实现
2012/12/15 Python
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
python super()函数的基本使用
2020/09/10 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
网页布局中CSS样式无效的十个重要原因详解
2017/08/10 HTML / CSS
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
自我评价的正确写法
2013/09/19 职场文书
同学会邀请函模板
2015/01/30 职场文书