Java+Selenium爬贴吧
想爬贴吧很多年了,一直拖到现在。前几天心血来潮,决定搞起。
大致思路如下:
启动driver》进入贴吧第一页》通过getPageUrls方法获取所有帖子的url和标题》找到下一页按钮并点击。如此循环,拿到整个贴吧帖子的url。
理想状态就是这样了。
遗憾的是,爬到大概一万个帖子时,再翻页时,显示的是当天的帖子,更古老的帖子都被百度屏蔽了。
public static void searchBa() {String tieba="%E6%9D%8E%E6%AF%85";String driverPath="D:/DevSoft/AllUtils/src/com/framework/libInteresting/spider/chromedriver.exe";System.setProperty("webdriver.chrome.driver",driverPath );ChromeOptions chromeOptions = new ChromeOptions();// 不加载图片Map<String, Object> prefs = new HashMap<String, Object>();prefs.put("profile.managed_default_content_settings.images", 2);chromeOptions.setExperimentalOption("prefs", prefs);WebDriver driver = new ChromeDriver(chromeOptions);driver.get("https://tieba.baidu.com/f?kw="+tieba+"&ie=utf-8");// 获取详细htmlboolean flag = true;while (flag) {try {Map<String, String> urls = getPageUrls(driver, driver.getPageSource());for (String url : urls.keySet()) {String title=urls.get(url);}Thread.sleep(300);} catch (Exception e) {e.printStackTrace();}// 下一页flag = goNextPage(driver);try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}driver.quit();driver.close();}public static Map<String, String> getPageUrls(WebDriver driver, String content) {HashMap<String, String> re = new HashMap<String, String>();List<String> htmls = SearchUtil.getListWithFeature(content,StringUtil.str2List("<a `class=\"j_th_tit`</a>", "`"));for (String html : htmls) {String htmlurl = SearchUtil.subString(html, "href=\"", "\"").get(0);html = StringUtil.kill(html, "<", ">");re.put(htmlurl.replace("/p/", ""), html);}return re;}public static boolean goNextPage(WebDriver driver) {try {WebDriverWait wait = new WebDriverWait(driver, 10);// 等待直到加载这个元素wait.until(new ExpectedCondition<WebElement>() {@Overridepublic WebElement apply(WebDriver d) {return d.findElement(By.xpath("//div[@id='frs_list_pager']/span/following-sibling::a[1]"));}}).click();} catch (Exception e) {e.printStackTrace();return false;}return true;}
拿到帖子地址后,就可以正式开始爬楼梯了。
有的楼层的回复较多,要找到“点击查看”,点击时,需要是登陆状态。所以在爬帖子前,需要先登陆
public static void login(WebDriver driver, String username, String password) {try {driver.findElement(By.linkText("登录")).click();WebDriverWait wait = new WebDriverWait(driver, 5);// 等待直到加载这个元素wait.until(new ExpectedCondition<WebElement>() {@Overridepublic WebElement apply(WebDriver d) {return d.findElement(By.cssSelector("p[id=TANGRAM__PSP_12__footerULoginBtn]"));}}).click();driver.findElement(By.name("userName")).sendKeys(username);driver.findElement(By.name("password")).sendKeys(password);driver.findElement(By.id("TANGRAM__PSP_12__submit")).click();} catch (Exception e) {}}
登陆后,也是逐页获取信息,大同小异。我的需求比较简单,就不献丑了。
Java+Selenium爬贴吧相关推荐
- Java+Selenium爬取JavaScript返回的网页数据
案例:本文主要描述如何根据快递单号使用Java+Selenium爬取"爱查快递网页"快递的跟踪信息并按照设计的数据格式返回数据 解决问题:爬取JavaScript返回的网页数据(网 ...
- Java selenium 爬取 星图
导入包: <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-firefox-driver --&g ...
- java+selenium爬取知网数据
使用selenium工具爬取知网相关数据,思路:根据几个关键词搜索出相关的内容,然后爬取列表中所有论文的访问链接. 注意:直接爬取的链接是不能用的,需要自己拼接一下.具体看代码.新手,代码写的有点乱. ...
- 基于Java + selenium 爬取某网站千张图片
预览(可以根据循环次数爬取大量图片) 一.网页分析 1 点击F12进入检查,将小箭头移到网页中随便一张图片上 2 进一步我们可以发现每一张图片的链接都包含在<ul>标签的子标签<li ...
- java怎样模拟点击网页,笔者操作Java+selenium实现网站模拟点击和页面数据爬取
电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到Java+selenium实现网站模拟点击和页面数据爬取的问题,如果我们遇到了Java+selenium实现网站模拟点击 ...
- java+selenium,40行代码完成支付宝账单爬取
java+selenium,40行代码完成支付宝账单爬取 需要jar selenium-server-4.0.0-alpha-5.jar 需要驱动 chromedriver.exe 驱动需要和浏览器版 ...
- java 动态爬虫_用selenium(Java)爬取b站up的动态
新人第一次发文,请多多指教. selenium设计目的是进行自动化测试,但是很显然这样的功能同样是爬虫所需要的.本文介绍如何用selenium爬取b站up动态. 无意中发现有很多up在动态中发布一些奇 ...
- java selenium自动化项目实战-入门(1)
selenium java selenium自动化项目实战 1.[报错]org.openqa.selenium.ElementClickInterceptedException: element cl ...
- Selenium爬取网易云音乐评论
Selenium爬取网易云音乐评论 一.爬取工具 1.1 selenium selenium这是一个第三方库我们可以通过 pip install selenium来安装这个第三方库. Sele ...
最新文章
- 基于Springboot实现作业管理系统
- C++ void类型指针的使用
- 对”命令“操作的命令
- linux查看jdk详细版本号,Linux中查看jdk版本
- 微课|《Python编程基础与案例集锦(中学版)》第2章(2)
- JavaScript权威指南--chapter 8函数
- 【活体人脸识别】FaceBagNet论文翻译详解
- 盘点:光通信的五个发展趋势
- ArcGIS网络分析之中国邮递员问题
- 各种dns:百度DNS/阿里DNS/114DNS/腾讯DNS/谷歌DNS/OpenDNS 对比评测
- html 显示闹钟,闹钟设置.html
- Hi3531添加16GByte(128Gbit) NAND Flash支持
- 纳米壳聚糖骨形成蛋白水凝胶/壳聚糖/蒙脱土纳米复合水凝胶/甘草多糖壳聚糖水凝胶的制备
- 一个low逼的boofuzz脚本生成器
- 为什么输入法显示中文打不出中文_搜狗中文输入无法显示汉字怎么办_win10搜狗输入法打不出汉字的解决方法...
- android html5播放器,用 HTML5 播放器在 iOS 或 Android 等移动设备上播放视频
- java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\2\librocksdbjni91
- 收货地址 - 新增收货地址
- twice论文-深度估计-BA_NET
- 二代锐龙服务器芯片,让锐龙再次翱翔:AMD二代Ryzen处理器性能解析
热门文章
- 太赞了!开源下载机器学习经典书 PRML所有相关资料:中文译本,官方代码,课程视频,学习笔记...
- 【竞赛】智能算法赛:智慧海洋建设Top1方案代码
- 资讯|WebRTC M90 更新
- 0408互联网新闻 | 区块链医疗解决方案落地应用,阿里云、支付宝共同研发;安卓全球开发者峰会将于10月23-24日在加州召开...
- 即时通讯音视频开发(五):认识主流视频编码技术H.264
- 法国时隔20年再折桂!“网易云信:世界杯巅峰决战之夜”活动圆满结束!
- 2018年10月Top 10 Python开源项目
- 转:写的不错的eclipse配置cdt的文章
- php SqlServer 中文汉字乱码
- 结束SQL阻塞的进程