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 15 Python
详解Python使用tensorflow入门指南
Feb 09 Python
python时间日期函数与利用pandas进行时间序列处理详解
Mar 13 Python
python机器学习之神经网络实现
Oct 13 Python
pygame游戏之旅 添加碰撞效果的方法
Nov 20 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
元组列表字典(莫烦python基础)
Apr 03 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
Mar 02 Python
简单了解django处理跨域请求最佳解决方案
Mar 25 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
python中@property的作用和getter setter的解释
Dec 22 Python
分析Python list操作为什么会错误
Nov 17 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 STRING 陷阱原理说明
2010/07/24 PHP
PHP中PDO的错误处理
2011/09/04 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
JavaScript 继承的实现
2009/07/09 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
centos系统升级python 2.7.3
2014/07/03 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
Python实现批量下载文件
2015/05/17 Python
python 删除非空文件夹的实例
2018/04/26 Python
python去除文件中重复的行实例
2018/06/29 Python
python爬虫中多线程的使用详解
2019/09/23 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
学前教育专业毕业生自荐信
2013/10/03 职场文书
日语系毕业生推荐信
2013/11/11 职场文书
四年级学生评语大全
2014/04/21 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
小程序实现文字循环滚动动画
2021/06/14 Javascript
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python