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中使用item()方法遍历字典的例子
Aug 26 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
pandas数值计算与排序方法
Apr 12 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
Jul 16 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
flask实现验证码并验证功能
Dec 05 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
python 实现音频叠加的示例
Oct 29 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
python3实现无权最短路径的方法
May 12 Python
python process模块的使用简介
May 14 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
E路文章系统PHP
2006/12/11 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
react build 后打包发布总结
2018/08/24 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
Python之list对应元素求和的方法
2018/06/28 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
西部世纪.net笔试题面试题
2014/04/03 面试题
点菜员岗位职责范本
2014/02/14 职场文书
本科生就业推荐信
2014/05/19 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
自荐信格式范文
2015/03/04 职场文书
宾馆安全管理制度
2015/08/06 职场文书
交通安全主题班会
2015/08/12 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
高中数学教学反思范文
2016/02/18 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
SQL Server Agent 服务无法启动
2022/04/20 SQL Server