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条件变量之生产者与消费者操作实例分析
Mar 22 Python
python读取文本中的坐标方法
Oct 14 Python
python爬取网易云音乐评论
Nov 16 Python
浅析python参数的知识点
Dec 10 Python
Pytorch 多块GPU的使用详解
Dec 31 Python
python Django 反向访问器的外键冲突解决
May 20 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 Python
看看如何用Python绘制小米新版天价logo
Apr 20 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简洁函数小结
2011/08/12 PHP
基于php设计模式中工厂模式详细介绍
2013/05/15 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
可输入的下拉框
2006/06/19 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
JS高阶函数原理与用法实例分析
2019/01/15 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
晚会主持词开场白
2014/03/17 职场文书
优秀员工评优方案
2014/06/13 职场文书
篮球赛口号
2014/06/18 职场文书
租房协议书
2014/09/12 职场文书
2014年人事科工作总结
2014/11/19 职场文书
周末问候语大全
2015/11/10 职场文书
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang