通过selenium抓取新浪微博
由于新浪微博的手机网页的访问加入了验证码,所以抓取新浪微博的后门行不通了,经过一系列的研究,最终使用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抓取新浪微博相关推荐
- Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据
Python,网络爬虫selenium与pyautogui抓取新浪微博用户数据 不需要登陆新浪微博账户,直接运行就可以通过python爬虫爬取新浪微博用户数据.本例selenium与pyautogui ...
- 测试开发Python培训:抓取新浪微博抓取数据-技术篇
测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的sele ...
- Scrapy抓取新浪微博
项目概述:相信很多小伙伴都有用过新浪微博,因为这是当今很火的一款社交app.正因为这样,我们需要获取新浪微博中每一个用户的信息以及评论.发布时间等来满足公司的需求,获取每日热点.评论量.点赞量等相关信 ...
- python爬虫批量抓取新浪微博用户ID及用户信息、微博内容
老师给的任务,要对批量的微博文本进行舆情分析.第一步就是数据的抓取.在网上搜了一下大多是基于手机版网页(wap/cn)的爬虫,但是我在电脑上打不开这些网站. 由于自己也是网页小白,所以就参考着别人的代 ...
- Python网络爬虫,pyautogui与pytesseract抓取新浪微博数据,OCR
Python网络爬虫,pyautogui与pytesseract抓取新浪微博数据,OCR方案 用ocr与pyautogui,以及webbrowser实现功能:设计爬虫抓取新浪微博数据,比如,抓取微博用 ...
- selenium抓取_使用Selenium的网络抓取电子商务网站
selenium抓取 In this article we will go through a web scraping process of an E-Commerce website. I hav ...
- Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语 ...
- [Python] python + selenium 抓取 京东商品数据(商品名称,售价,店铺,分类,订单信息,好评率,评论等)
目录 一.环境 二.简介 三.京东网页分析 1.获取商品信息入口--商品列表链接获取 2.获取商品信息入口--商品详情链接获取 3.商品详情获取 4.商品评论获取 四.代码实现 五.运行结果 六.结语 ...
- 抓取新浪微博好友昵称和性别
这次抓取新浪微博好友数据的方法只是个人实验之作,不具有通用性,只是为后面学习模拟登陆抓取微博数据打一个基础. import requests import re import pandas as pd ...
最新文章
- android手势放大自动还原,ImageView通过matrix实现手势缩放,放大,缩小 ,移动
- Maven学习(三) -- 仓库
- leetcode之Divide Two Integers
- Spring 开启Annotation context:annotation-config 和 context:component-scan诠释及区别
- Swoole 源码分析——Server模块之初始化
- java试讲题目,常见的Java面试题汇总
- python rq asyncio_python异步IO-asyncio
- codevs1085数字游戏(环形DP+划分DP )
- 两个整数求平均值,防止溢出的问题
- 阿里云HBase全新发布X-Pack 赋能轻量级大数据平台
- 零基础的人也能学好C++
- 【CODEVS1191】数轴染色
- 在Qtopia中添加国际化支持
- python关于二手房的课程论文_python 爬虫基础-二手房信息获取为例
- Dorado7自定义下拉框
- 大数据模型-银行客户细分与个人客户流失预警
- LeetCode——110,判断平衡二叉树
- 复盘港股2021:新股上市热潮不减,市场重现“冰火两重天”
- Ultraiso制作Centos7 优盘Udisk 启动镜像
- Zookeeper安装部署调试命令