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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
Python pickle模块用法实例
Apr 14 Python
python生成二维码的实例详解
Oct 29 Python
Python实现文件信息进行合并实例代码
Jan 17 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
python 画条形图(柱状图)实例
Apr 24 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延迟静态绑定使用方法实例解析
2020/09/05 PHP
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
Jquery之美中不足小结
2011/02/16 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
在Django的视图中使用form对象的方法
2015/07/18 Python
python2 与python3的print区别小结
2018/01/16 Python
python使用logging模块发送邮件代码示例
2018/01/18 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
python实现小世界网络生成
2019/11/21 Python
python创建子类的方法分析
2019/11/28 Python
python实现ip地址的包含关系判断
2020/02/07 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
打印机墨盒:123Inkjets
2017/02/16 全球购物
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
毕业生就业推荐信范文
2013/12/01 职场文书
名人演讲稿范文
2013/12/28 职场文书
三方合作协议书范本
2014/04/18 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技
以下牛机,你有几个
2022/04/05 无线电