Java使用Selenium 爬取中国知网

所需Jar包

中国知网的网页结构,我就不在这里赘述了,自己去看,这里我操作的是爬取博硕论文,只抓取前十页

当Selenium无法调取ChromeDriver时可参考以下建议:

1.chromedriver是否与当前Chrome版本兼容
2.chromedriver是否放置在Chrome安装目录下
3.chromedriver是否配置环境变量
4.selenium版本是否与chromedriver相冲突,换个版本测试

附上代码

package com.qdcz.plugins;import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;import java.util.List;
import java.util.Set;public class Test {public static void main(String args[]) throws Exception {//调用chrome driverSystem.setProperty("webdriver.chrome.driver", "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe");//调用chromeWebDriver driver = new ChromeDriver();//调整高度((ChromeDriver) driver).executeScript("window.scrollTo(0, document.body.scrollHeight);");//获取网址((ChromeDriver) driver).get("http://epub.cnki.net/KNS/brief/result.aspx?dbprefix=CMFD");//高级搜索WebElement high = driver.findElement(By.xpath("//*[@id=\"1_3\"]/a"));high.click();Thread.sleep(1000);//定位元素WebElement in = ((ChromeDriver) driver).findElementByName("txt_1_value1");//定义搜索内容String searchWord = "";searchWord = "基因芯片";//发送搜索内容in.sendKeys(searchWord);((ChromeDriver) driver).findElementByXPath("//*[@id='ddSubmit']/span").click();((ChromeDriver) driver).findElementByXPath("//*[@id='btnSearch']").click();Thread.sleep(2000);//清除分类获得所有((ChromeDriver) driver).findElementByXPath("//*[@id='XuekeNavi_Div']/div[1]/input[1]").click();((ChromeDriver) driver).findElementByXPath("//*[@id='B']/span/img[1]").click();Thread.sleep(2000);//分割符System.out.println("-----------------------");//定位iframeWebElement iframe = driver.findElement(By.id("iframeResult"));//也可直接这样写((ChromeDriver) driver).switchTo().frame("id=iframeResult");//线程休眠Thread.sleep(2000);for (int i = 0; i <10; i++) {//获取窗口String now_handle = driver.getWindowHandle();Set<String> all_handles = driver.getWindowHandles();//判断窗口是否一致for (String handle : all_handles) {if (handle != now_handle) {driver.switchTo().window(handle);((ChromeDriver) driver).switchTo().frame(iframe);//选择50页WebElement btn = ((ChromeDriver) driver).findElementByXPath("//*[@id=\"id_grid_display_num\"]/a[3]");btn.click();//获取页面内容//String content=driver.getPageSource();//System.out.println(content);//获取iframe元素内容直至trList<WebElement> tb = driver.findElements(By.xpath("//*[@id=\"ctl00\"]/table/tbody/tr[2]"));for (WebElement t : tb) {List<WebElement> tbod = t.findElements(By.tagName("tbody"));for (WebElement tr : tbod) {List<WebElement> td = tr.findElements(By.tagName("tr"));td.remove(0);for (WebElement tds : td) {List<WebElement> tdss = tds.findElements(By.tagName("td"));String title = tdss.get(1).getText();String author=tdss.get(2).getText();String college=tdss.get(3).getText();String year=tdss.get(4).getText();System.out.println(title+"--"+author+"--"+college+"--"+year);}}}}}//线程休眠Thread.sleep(1000);WebElement nextBtn=((ChromeDriver) driver).findElementByXPath("//*[@id=\"Page_next\"]");nextBtn.click();}//关闭driverdriver.close();}}

附上结果

我在想如何抓取全,中国知网的论文题目,作者,导师等等信息,一直没有什么大的思路进展,因为中国知网有Piwik.js写了追踪函数,其次的url参数里有时间加密,所以获取url也不能正确的保证访问到原网页,这让我很是苦恼,目前已知的有一种时间 参数时Unix时间格式,具体页面后面的我不知道是如何进行加密的,破解不了。另外有一种思路是通过post请求大学页面抓取,这是可行的,但与我想要的数据有差异,故不尝试。
诸位有什么好的想法或建议,可以告诉我,一起交流~
本文在一定程度上借鉴了https://blog.csdn.net/hensonwells/article/details/77126819这篇文章(python)的思想,有兴趣的同学可以去看看。
如果你想进一步抓取知网的信息(非论文)可以看看我写的另一篇文章
https://blog.csdn.net/qq_40244755/article/details/88689814

Java使用Selenium+ChromeDriver 爬取中国知网相关推荐

  1. HttpUnit爬取中国知网特定大学网页

    继昨天使用Selenium+ChromeDriver爬取中国知网页面后,今天又想到了一些别的方法,就是HtmlUnit,作为一名萌新程序员,多写写总是好的,操蛋的是,还没想出好的爬取方法. 奉上jar ...

  2. Python-Selenium Webdriver+google chrome浏览器爬取中国知网的文献概述

    Python-Selenium Webdriver+google chrome浏览器爬取中国知网的文献概述 目录 Python-Selenium Webdriver+google chrome浏览器爬 ...

  3. Python爬取中国知网文献、参考文献、引证文献

    转载自博客园文章作为学习资料,代码及相关介绍非常详细.原文链接见Python爬取 中国知网文献.参考文献.引证文献

  4. Selenium+ChromeDriver爬取链家网二手房价(包括经纬度)信息

    [需求]   爬取青岛市二手房源信息,要求包括房源基本信息.小区名称.总价.单价以及房源的经纬度信息.   根据以上需求,进入青岛市二手房首页,如图1所示,进行页面分析: 图1 [页面分析]   首先 ...

  5. python爬取中国知网(中国优秀硕士学位论文数据库)

    笔者这几天受团队任务安排,需要写一份儿关于知网(中国优秀硕士学位论文数据库   入口:http://gb.oversea.cnki.net/kns55/brief/result.aspx?dbPref ...

  6. 爬取中国知网搜索cnki.net

    爬取cnki.net知网搜索页 import requests from lxml.html import etree url = 'https://kns.cnki.net/KNS8/Brief/G ...

  7. 使用selenium + chrome爬取中国大学Mooc网的计算机学科的所有课程链接

    目的:使用selenium + chrome爬取中国大学Mooc网计算机学科的所有的课程链接列表 思路:找到每个分页的节点属性为class="m-course-list" 的div ...

  8. python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫

    导语 前几篇文章介绍了爬取静态网站的主要方法.今天写一个小项目实践一下.本项目可以在终端窗口查询全国3400多个区县的当日天气信息和近七天天气信息. 实现效果 [Python爬虫]写一个爬取中国天气网 ...

  9. python爬取中国天气网中国全部城市的天气链接

    近期自己尝试用python写一个qqbot实现天气查询功能,现已基本实现 已经基本完成爬取中国天气网的所有城市的天气情况链接 下附中国天气网所有城市的名称及对应链接 {'朝阳': 'http://ww ...

最新文章

  1. iOS FMDB之FMDatabaseQueue(事物与非事物)
  2. Leangoo 6.2.7 版发布
  3. Summer Plan(挖坑待填)
  4. java加载并运行虚拟机_《深入理解Java虚拟机》- Java虚拟机是如何加载Java类的?...
  5. Solr 查询时候关键期 编码问题
  6. The requested URL /**** was not found on this server
  7. pcm 采样率转换_All Video Converter Pro for mac(音视频格式转换器)
  8. 【LeetCode笔记】200. 岛屿数量(Java、DFS)
  9. 机器人绳索英雄下载苹果手机_警察机器人绳索英雄游戏下载-警察机器人绳索英雄苹果版v1.0-FC游戏网...
  10. python excel案例导入jira_用Python脚本批量添加JIRA用户,python,jira
  11. HTTP API 设计指南(响应部分)
  12. JAVA基于J2ME的手机游戏开发免费
  13. JUCE 中的音频编解码
  14. oracle 10g、11g、 12c、19c有什么区别
  15. 采购订单文本复制规则
  16. lls 在* 80端口已经绑定的情况下,批量加域名到*80端口
  17. 震惊!你可能下了个假的抢红包神器
  18. 思科5505/5506防火墙配置與範例
  19. Java中Scanner的用法
  20. BlenderGIS 使用总结

热门文章

  1. (1)评分——点亮星星,blackbone+jq
  2. 中国各大银行简称——搞笑版
  3. android中像素单位dp、px、pt、sp转换
  4. Memcache、Redis应用场景与高级用法
  5. java中数字格式金额转换成中文大写金额工具类
  6. printf函数详解
  7. C语言运算符优先级 之 快速记忆6,[快速记忆]C语言/php的运算符优先级(结合性)...
  8. 【C/C++服务器开发】中间件的含义及常用中间件介绍
  9. 当代计算机技术在建筑设备中的应用,计算机技术在建筑设计中的应用介绍
  10. 如何查看Ubuntu的IP地址以及端口号