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二分查找详解
Sep 13 Python
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
python spyder中读取txt为图片的方法
Apr 27 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
nohup后台启动Python脚本,log不刷新的解决方法
Jan 14 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
python 实现简单的FTP程序
Dec 27 Python
tensorflow 初始化未初始化的变量实例
Feb 06 Python
python的html标准库
Apr 29 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文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
js控制input输入字符解析
2013/12/27 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
vue实现侧边栏导航效果
2019/10/21 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
Python中生成器和yield语句的用法详解
2015/04/17 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
Python类及获取对象属性方法解析
2020/06/15 Python
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
开学季活动策划方案
2014/02/28 职场文书
一年级班主任感言
2014/03/08 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
给学校的建议书范文
2014/05/15 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
工会趣味活动方案
2014/08/18 职场文书
关于运动会的广播稿
2014/09/22 职场文书
房屋出租委托书格式
2014/09/23 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
人事任命书范本
2015/09/21 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis