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代码制作configure文件示例
Jul 28 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
python数据挖掘需要学的内容
Jun 23 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
Python随机函数库random的使用方法详解
Aug 21 Python
python getpass实现密文实例详解
Sep 24 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Python通过4种方式实现进程数据通信
Mar 12 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 Python
Python爬虫基础之初次使用scrapy爬虫实例
Jun 26 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获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
任意位置显示html菜单
2007/02/01 Javascript
google地图的路线实现代码
2009/08/20 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
Python缩进和冒号详解
2016/06/01 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
详解Django的CSRF认证实现
2018/10/09 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
Python 处理图片像素点的实例
2019/01/08 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
Django中create和save方法的不同
2019/08/13 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
新西兰优惠网站:Treat Me
2019/07/04 全球购物
什么是封装
2013/03/26 面试题
会计专业自荐信范文
2013/12/02 职场文书
法制宣传口号
2014/06/16 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
免职证明样本
2014/10/23 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
python本地文件服务器实例教程
2021/05/02 Python
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python