Java使用Selenium+ChromeDriver 爬取中国知网
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 爬取中国知网相关推荐
- HttpUnit爬取中国知网特定大学网页
继昨天使用Selenium+ChromeDriver爬取中国知网页面后,今天又想到了一些别的方法,就是HtmlUnit,作为一名萌新程序员,多写写总是好的,操蛋的是,还没想出好的爬取方法. 奉上jar ...
- Python-Selenium Webdriver+google chrome浏览器爬取中国知网的文献概述
Python-Selenium Webdriver+google chrome浏览器爬取中国知网的文献概述 目录 Python-Selenium Webdriver+google chrome浏览器爬 ...
- Python爬取中国知网文献、参考文献、引证文献
转载自博客园文章作为学习资料,代码及相关介绍非常详细.原文链接见Python爬取 中国知网文献.参考文献.引证文献
- Selenium+ChromeDriver爬取链家网二手房价(包括经纬度)信息
[需求] 爬取青岛市二手房源信息,要求包括房源基本信息.小区名称.总价.单价以及房源的经纬度信息. 根据以上需求,进入青岛市二手房首页,如图1所示,进行页面分析: 图1 [页面分析] 首先 ...
- python爬取中国知网(中国优秀硕士学位论文数据库)
笔者这几天受团队任务安排,需要写一份儿关于知网(中国优秀硕士学位论文数据库 入口:http://gb.oversea.cnki.net/kns55/brief/result.aspx?dbPref ...
- 爬取中国知网搜索cnki.net
爬取cnki.net知网搜索页 import requests from lxml.html import etree url = 'https://kns.cnki.net/KNS8/Brief/G ...
- 使用selenium + chrome爬取中国大学Mooc网的计算机学科的所有课程链接
目的:使用selenium + chrome爬取中国大学Mooc网计算机学科的所有的课程链接列表 思路:找到每个分页的节点属性为class="m-course-list" 的div ...
- python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫
导语 前几篇文章介绍了爬取静态网站的主要方法.今天写一个小项目实践一下.本项目可以在终端窗口查询全国3400多个区县的当日天气信息和近七天天气信息. 实现效果 [Python爬虫]写一个爬取中国天气网 ...
- python爬取中国天气网中国全部城市的天气链接
近期自己尝试用python写一个qqbot实现天气查询功能,现已基本实现 已经基本完成爬取中国天气网的所有城市的天气情况链接 下附中国天气网所有城市的名称及对应链接 {'朝阳': 'http://ww ...
最新文章
- iOS FMDB之FMDatabaseQueue(事物与非事物)
- Leangoo 6.2.7 版发布
- Summer Plan(挖坑待填)
- java加载并运行虚拟机_《深入理解Java虚拟机》- Java虚拟机是如何加载Java类的?...
- Solr 查询时候关键期 编码问题
- The requested URL /**** was not found on this server
- pcm 采样率转换_All Video Converter Pro for mac(音视频格式转换器)
- 【LeetCode笔记】200. 岛屿数量(Java、DFS)
- 机器人绳索英雄下载苹果手机_警察机器人绳索英雄游戏下载-警察机器人绳索英雄苹果版v1.0-FC游戏网...
- python excel案例导入jira_用Python脚本批量添加JIRA用户,python,jira
- HTTP API 设计指南(响应部分)
- JAVA基于J2ME的手机游戏开发免费
- JUCE 中的音频编解码
- oracle 10g、11g、 12c、19c有什么区别
- 采购订单文本复制规则
- lls 在* 80端口已经绑定的情况下,批量加域名到*80端口
- 震惊!你可能下了个假的抢红包神器
- 思科5505/5506防火墙配置與範例
- Java中Scanner的用法
- BlenderGIS 使用总结
热门文章
- (1)评分——点亮星星,blackbone+jq
- 中国各大银行简称——搞笑版
- android中像素单位dp、px、pt、sp转换
- Memcache、Redis应用场景与高级用法
- java中数字格式金额转换成中文大写金额工具类
- printf函数详解
- C语言运算符优先级 之 快速记忆6,[快速记忆]C语言/php的运算符优先级(结合性)...
- 【C/C++服务器开发】中间件的含义及常用中间件介绍
- 当代计算机技术在建筑设备中的应用,计算机技术在建筑设计中的应用介绍
- 如何查看Ubuntu的IP地址以及端口号