由于新浪微博的手机网页的访问加入了验证码,所以抓取新浪微博的后门行不通了,经过一系列的研究,最终使用selenium工具模仿浏览器行为访问新浪微博公众号,因为浏览器访问网页时是以访客的形式访问 ,所以避免了用户登录这一过程,可以顺利的进行指定微博的内容抓取,selenium的缺点是无法确定页面加载完毕的时间也js执行完毕的时间,所以在抓取效率方面会有所牺牲。

首先我们先来了解一下selenium这个工具。selenium是一个模拟浏览器,进行自动化测试的工具,它提供一组API可以与真实的浏览器内核交互。Selenium是跨语言的,有Java、C#、python等版本,并且支持多种浏览器,chrome、firefox以及IE都支持。在Java项目中使用Selenium,需要做两件事。首先下载seleunim所需要的jar包,导入至工程中,然后下载使用的浏览器对应的驱动,本文中使用的是谷歌浏览器,对应的驱动是一个exe文件,推荐放在谷歌浏览的安装目录下,在代码中配置路径即可,本文以Java开发环境为例,抓取新浪微博指定微博的内容,直接上代码。

//等待数据加载的时间
//为了防止服务器封锁,这里的时间要模拟人的行为,随机且不能太短
long waitLoadBaseTime = 10000;
int waitLoadRandomTime = 3000;
Random random = new Random(System.currentTimeMillis());
// 设置 chrome 的路径
System.setProperty(
"webdriver.chrome.driver",
"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
// 创建一个 ChromeDriver 的接口,用于连接 Chrome
@SuppressWarnings("deprecation")
ChromeDriverService service = new ChromeDriverService.Builder()
.usingDriverExecutable(
new File(
"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"))
.usingAnyFreePort().build();
service.start();
// 创建一个 Chrome 的浏览器实例
WebDriver driver = new RemoteWebDriver(service.getUrl(),
DesiredCapabilities.chrome());

// 让浏览器访问微博主页
driver.get("http://weibo.com/338303018");
//等待页面动态加载完毕
Thread.sleep(waitLoadBaseTime+random.nextInt(waitLoadRandomTime));

//选择每条微博的整体子模块
List<WebElement> elements = driver.findElements(By.cssSelector("div[action-type=feed_list_item]"));
//选择每条微博的文本内容模块
List<WebElement> elements2 = driver.findElements(By.cssSelector("div[node-type=feed_list_reason],div[node-type=feed_list_content]"));
System.out.println(elements.size());
for (int i = 0; i < elements.size(); i++) {

//展开评论
elements.get(i).findElement(By.cssSelector("a[action-type=fl_comment]")).click();;
Thread.sleep(1000);

}
//评论列表
List<WebElement> elements3 = driver.findElements(By.cssSelector("div[node-type=feed_list_commentList]"));
System.out.println(elements3.size());
int a = 0;
for (int i =0;i<elements2.size()&&a<elements3.size();i++) {
//抓取内容
String content = elements2.get(i).getText();
if (!content.contains("转发微博")) {

System.out.println("content:"+content);
//抓取评论
if (elements3.get(a).getText().isEmpty()) {

System.out.println("comment:no comment");

}else{

System.out.println("comment:"+elements3.get(a).getText());
}

a++;

}

}

driver.quit();
// 关闭 ChromeDriver 接口
service.stop();

相关jar包与驱动资源下载:http://download.csdn.net/detail/u013407099/9521615

通过selenium抓取新浪微博相关推荐

  1. Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据

    Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据 不需要登陆新浪微博账户,直接运行就可以通过python爬虫爬取新浪微博用户数据.本例selenium与pyautogui ...

  2. 测试开发Python培训:抓取新浪微博抓取数据-技术篇

    测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的sele ...

  3. Scrapy抓取新浪微博

    项目概述:相信很多小伙伴都有用过新浪微博,因为这是当今很火的一款社交app.正因为这样,我们需要获取新浪微博中每一个用户的信息以及评论.发布时间等来满足公司的需求,获取每日热点.评论量.点赞量等相关信 ...

  4. python爬虫批量抓取新浪微博用户ID及用户信息、微博内容

    老师给的任务,要对批量的微博文本进行舆情分析.第一步就是数据的抓取.在网上搜了一下大多是基于手机版网页(wap/cn)的爬虫,但是我在电脑上打不开这些网站. 由于自己也是网页小白,所以就参考着别人的代 ...

  5. Python网络爬虫,pyautogui与pytesseract抓取新浪微博数据,OCR

    Python网络爬虫,pyautogui与pytesseract抓取新浪微博数据,OCR方案 用ocr与pyautogui,以及webbrowser实现功能:设计爬虫抓取新浪微博数据,比如,抓取微博用 ...

  6. selenium抓取_使用Selenium的网络抓取电子商务网站

    selenium抓取 In this article we will go through a web scraping process of an E-Commerce website. I hav ...

  7. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语 ...

  8. [Python] python + selenium 抓取 京东商品数据(商品名称,售价,店铺,分类,订单信息,好评率,评论等)

    目录 一.环境 二.简介 三.京东网页分析 1.获取商品信息入口--商品列表链接获取 2.获取商品信息入口--商品详情链接获取 3.商品详情获取 4.商品评论获取 四.代码实现 五.运行结果 六.结语 ...

  9. 抓取新浪微博好友昵称和性别

    这次抓取新浪微博好友数据的方法只是个人实验之作,不具有通用性,只是为后面学习模拟登陆抓取微博数据打一个基础. import requests import re import pandas as pd ...

最新文章

  1. android手势放大自动还原,ImageView通过matrix实现手势缩放,放大,缩小 ,移动
  2. Maven学习(三) -- 仓库
  3. leetcode之Divide Two Integers
  4. Spring 开启Annotation context:annotation-config 和 context:component-scan诠释及区别
  5. Swoole 源码分析——Server模块之初始化
  6. java试讲题目,常见的Java面试题汇总
  7. python rq asyncio_python异步IO-asyncio
  8. codevs1085数字游戏(环形DP+划分DP )
  9. 两个整数求平均值,防止溢出的问题
  10. 阿里云HBase全新发布X-Pack 赋能轻量级大数据平台
  11. 零基础的人也能学好C++
  12. 【CODEVS1191】数轴染色
  13. 在Qtopia中添加国际化支持
  14. python关于二手房的课程论文_python 爬虫基础-二手房信息获取为例
  15. Dorado7自定义下拉框
  16. 大数据模型-银行客户细分与个人客户流失预警
  17. LeetCode——110,判断平衡二叉树
  18. 复盘港股2021:新股上市热潮不减,市场重现“冰火两重天”
  19. Ultraiso制作Centos7 优盘Udisk 启动镜像
  20. Zookeeper安装部署调试命令

热门文章

  1. UE的Blend Profile
  2. android10获取手机号码,【android,10】10.调用web服务获取手机号码归属地
  3. 如何群发邮件,5秒帮你搞定
  4. 软工实践(五)——获小黄衫有感
  5. 起始字节 和起始位_frechlet起始距离fid的简短介绍
  6. Scratch之制作幸运抽奖机
  7. scons 手册_SCons笔记(详细版)
  8. vue css 拖拽,vue----拖拽小方块
  9. MySQL配置参数大全
  10. druid安装与案例