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 修改文件指定行的方法
May 15 Python
实例讲解Python中的私有属性
Aug 21 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
python 回调函数和回调方法的实现分析
Mar 23 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
Python中的Django基本命令实例详解
Jul 15 Python
Django后台admin的使用详解
Jul 08 Python
python实现PID算法及测试的例子
Aug 08 Python
Python csv文件的读写操作实例详解
Nov 19 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
如何在Python中创建二叉树
Mar 30 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中var_export与var_dump的区别分析
2010/08/21 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
php验证码实现代码(3种)
2015/09/07 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
详解python之多进程和进程池(Processing库)
2017/06/09 Python
python更改已存在excel文件的方法
2018/05/03 Python
Python异常处理例题整理
2019/07/07 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
开办化妆品公司创业计划书
2013/12/26 职场文书
syb养殖创业计划书
2014/01/09 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
公司会议开幕词
2016/03/03 职场文书
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL