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 代码效率的方法
Jul 03 Python
举例讲解Python面向对象编程中类的继承
Jun 17 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
Python Django 前后端分离 API的方法
Aug 28 Python
python中wheel的用法整理
Jun 15 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
python如何利用paramiko执行服务器命令
Nov 07 Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
python脚本框架webpy的url映射详解
Nov 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
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
shiro授权的实现原理
2017/09/21 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
python绘图库Matplotlib的安装
2014/07/03 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
python 实现单通道转3通道
2019/12/03 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
纺织工程专业个人求职信范文
2014/01/27 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
上诉状格式
2015/05/23 职场文书
西安事变观后感
2015/06/12 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python