想爬贴吧很多年了,一直拖到现在。前几天心血来潮,决定搞起。
大致思路如下:
启动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爬贴吧相关推荐

  1. Java+Selenium爬取JavaScript返回的网页数据

    案例:本文主要描述如何根据快递单号使用Java+Selenium爬取"爱查快递网页"快递的跟踪信息并按照设计的数据格式返回数据 解决问题:爬取JavaScript返回的网页数据(网 ...

  2. Java selenium 爬取 星图

    导入包: <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-firefox-driver --&g ...

  3. java+selenium爬取知网数据

    使用selenium工具爬取知网相关数据,思路:根据几个关键词搜索出相关的内容,然后爬取列表中所有论文的访问链接. 注意:直接爬取的链接是不能用的,需要自己拼接一下.具体看代码.新手,代码写的有点乱. ...

  4. 基于Java + selenium 爬取某网站千张图片

    预览(可以根据循环次数爬取大量图片) 一.网页分析 1 点击F12进入检查,将小箭头移到网页中随便一张图片上 2 进一步我们可以发现每一张图片的链接都包含在<ul>标签的子标签<li ...

  5. java怎样模拟点击网页,笔者操作Java+selenium实现网站模拟点击和页面数据爬取

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到Java+selenium实现网站模拟点击和页面数据爬取的问题,如果我们遇到了Java+selenium实现网站模拟点击 ...

  6. java+selenium,40行代码完成支付宝账单爬取

    java+selenium,40行代码完成支付宝账单爬取 需要jar selenium-server-4.0.0-alpha-5.jar 需要驱动 chromedriver.exe 驱动需要和浏览器版 ...

  7. java 动态爬虫_用selenium(Java)爬取b站up的动态

    新人第一次发文,请多多指教. selenium设计目的是进行自动化测试,但是很显然这样的功能同样是爬虫所需要的.本文介绍如何用selenium爬取b站up动态. 无意中发现有很多up在动态中发布一些奇 ...

  8. java selenium自动化项目实战-入门(1)

    selenium java selenium自动化项目实战 1.[报错]org.openqa.selenium.ElementClickInterceptedException: element cl ...

  9. Selenium爬取网易云音乐评论

    Selenium爬取网易云音乐评论 一.爬取工具 1.1 selenium ​ selenium这是一个第三方库我们可以通过 pip install selenium来安装这个第三方库. ​ Sele ...

最新文章

  1. 基于Springboot实现作业管理系统
  2. C++ void类型指针的使用
  3. 对”命令“操作的命令
  4. linux查看jdk详细版本号,Linux中查看jdk版本
  5. 微课|《Python编程基础与案例集锦(中学版)》第2章(2)
  6. JavaScript权威指南--chapter 8函数
  7. 【活体人脸识别】FaceBagNet论文翻译详解
  8. 盘点:光通信的五个发展趋势
  9. ArcGIS网络分析之中国邮递员问题
  10. 各种dns:百度DNS/阿里DNS/114DNS/腾讯DNS/谷歌DNS/OpenDNS 对比评测
  11. html 显示闹钟,闹钟设置.html
  12. Hi3531添加16GByte(128Gbit) NAND Flash支持
  13. 纳米壳聚糖骨形成蛋白水凝胶/壳聚糖/蒙脱土纳米复合水凝胶/甘草多糖壳聚糖水凝胶的制备
  14. 一个low逼的boofuzz脚本生成器
  15. 为什么输入法显示中文打不出中文_搜狗中文输入无法显示汉字怎么办_win10搜狗输入法打不出汉字的解决方法...
  16. android html5播放器,用 HTML5 播放器在 iOS 或 Android 等移动设备上播放视频
  17. java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\2\librocksdbjni91
  18. 收货地址 - 新增收货地址
  19. twice论文-深度估计-BA_NET
  20. 二代锐龙服务器芯片,让锐龙再次翱翔:AMD二代Ryzen处理器性能解析

热门文章

  1. 太赞了!开源下载机器学习经典书 PRML所有相关资料:中文译本,官方代码,课程视频,学习笔记...
  2. 【竞赛】智能算法赛:智慧海洋建设Top1方案代码
  3. 资讯|WebRTC M90 更新
  4. 0408互联网新闻 | 区块链医疗解决方案落地应用,阿里云、支付宝共同研发;安卓全球开发者峰会将于10月23-24日在加州召开...
  5. 即时通讯音视频开发(五):认识主流视频编码技术H.264
  6. 法国时隔20年再折桂!“网易云信:世界杯巅峰决战之夜”活动圆满结束!
  7. 2018年10月Top 10 Python开源项目
  8. 转:写的不错的eclipse配置cdt的文章
  9. php SqlServer 中文汉字乱码
  10. 结束SQL阻塞的进程