前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过selenium抓取新浪微博

通过selenium抓取新浪微博

作者头像
code2roc
发布2023-07-19 14:21:27
1880
发布2023-07-19 14:21:27
举报

由于新浪微博的手机网页的访问加入了验证码,所以抓取新浪微博的后门行不通了,经过一系列的研究,最终使用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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档