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解析文件示例
Jan 23 Python
Python实现注册登录系统
Aug 08 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
python 切换root 执行命令的方法
Jan 19 Python
python取余运算符知识点详解
Jun 27 Python
Python列表对象实现原理详解
Jul 01 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
python操作cfg配置文件方式
Dec 22 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
python爬虫今日热榜数据到txt文件的源码
Feb 23 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原创论坛
2006/10/09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
Python中非常实用的一些功能和函数分享
2015/02/14 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python 数据结构之旋转链表
2017/02/25 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
Python 实现微信自动回复的方法
2020/09/11 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
python中K-means算法基础知识点
2021/01/25 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
公共机构节能宣传周活动总结
2014/07/09 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
2014年统战工作总结
2014/12/09 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
贷款担保书范本
2015/09/22 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
CPU不支持Windows11系统怎么办
2021/11/21 数码科技