java使用jsoup抓取中国知网数据思路与测试记录
2018-09-30 14:45
459 查看
版权声明:欢迎转载 https://blog.csdn.net/m0_37897662/article/details/82909356
前段时间测试抓取知网数据,弄了很久都失败了,然后就不想弄了.... 今天重新整理,记录下来,成功与否都能做个参考.
- 测试
cookies
第一次访问网站的时候返回的一个cookies,里面有4个参数;
ASP.NET_SessionId , Ecp_ClientId , Ecp_IpLoginFail , SID_kns
这个参数是后续请求必须要的.否则就会找不到用户,浏览器不同提交的cookies也略有差异,谷歌的cookies:
con.cookie("_pk_ses", "*"); con.cookie("ASP.NET_SessionId","gtiddqzwyj5gpg0qgxipyqo3"); con.cookie("ASPSESSIONIDQCSTBCRB","HKNBKCGDNLDLNHJECPKOJLED"); con.cookie("CNZZDATA3258975","cnzz_eid%3D696775271-1525654797-http%253A%252F%252Fkns.cnki.net%252F%26ntime%3D1538273733"); con.cookie("Ecp_ClientId", "5180531163302738890"); con.cookie("Ecp_IpLoginFail","180930115.171.133.231"); con.cookie("KNS_SortType","custommode@SCDB");//摘要模式(必填) con.cookie("KNS_SortType",""); //空为列表模式- 摘要模式(custommode@SCDB) con.cookie("RsPerPage","50"); con.cookie("SID_kcms","124111"); //摘要模式(必填) con.cookie("SID_klogin","125144"); //可忽略 con.cookie("SID_kns","123106"); con.cookie("SID_krsnew","125132");//可忽略 con.cookie("UM_distinctid","163386ea9a727b-04e123947bf39b-3961430f-1fa400-163386ea9a8e52"); con.cookie("_pk_id","82b531d4-7052-45bb-8132-b45f0932ceec.1525660161.11.1528872420.1528868668."); con.cookie("_pk_ref","%5B%22%22%2C%22%22%2C1538116979%2C%22http%3A%2F%2Fwww.cnki.net%2F%22%5D"); con.cookie("_pk_ses","*"); con.cookie("amid","696cc3d1-fa9e-4b87-9bdf-009344a96698"); con.cookie("cnkiUserKey","9aae4225-eafe-ddc1-25cc-3c392546db3a");
火狐的cookies比较少:
ASP.NET_SessionId r4qmdxxrddn3adzaz2gjwyi0 ASPSESSIONIDQQDDBCDS NAPLIBLDAAMKBPDFHBFNKOHK cnkiUserKey 8d21c7e8-db62-9425-3cd6-60b03cbff372 Ecp_ClientId 7180928144201298321 Ecp_IpLoginFail 180930115.171.133.231 KNS_DisplayModel custommode@SCDB KNS_SortType RsPerPage 50 SID_klogin 125143 SID_kns 123124 SID_krsnew 125134
F12获取请求数据地址
首先用浏览器搜索,然后把cookies复制到程序中访问,成功返回数据页面.
接下来简化cookies,寻找必备参数.(待续)
- 测试二
简化cookies访问,我发现只有两个cookie是必不可少的:
ASP.NET_SessionId和SID_kns;
于是测试继续…
失败案例一
- 加入请求头(后来发现这个请求头可以省略掉)
- 获取cookies
String url = "http://kns.cnki.net/kns/brief/result.aspx?dbprefix=SCDB"; Connection con = Jsoup.connect(url); //执行连接,获取返回response Connection.Response response = con.execute(); //获取返回cookies Map<String,String> map = response.cookies(); String sessionId = map.get("ASP.NET_SessionId"); String SID_kns = map.get("SID_kns");
- 设置cookies
url="http://kns.cnki.net/kns/brief/brief.aspx?pagename=ASP.brief_result_aspx&isinEn=1&dbPrefix=SCDB&dbCatalog=%e4%b8%ad%e5%9b%bd%e5%ad%a6%e6%9c%af%e6%96%87%e7%8c%ae%e7%bd%91%e7%bb%9c%e5%87%ba%e7%89%88%e6%80%bb%e5%ba%93&ConfigFile=SCDB.xml&research=off&t=1538278623116&keyValue=%E5%A5%A5%E6%B2%99%E5%88%A9%E9%93%82&S=1&sorttype=&DisplayMode=custommode"; con.url(url); con.cookie("ASP.NET_SessionId",sessionId); // con.cookie("Ecp_ClientId", "5180531163302738890"); // con.cookie("Ecp_IpLoginFail","180930115.171.133.231"); con.cookie("SID_kns",SID_kns);返回请求:“对不起,服务器上不存在此用户!可能已经被剔除或参数错误”
成功案例
首先用浏览器访问知网搜索,F12获取请求Cookie中sessionId和Kns
然后把sessionId和Kns放到程序中,访问访问是成功的. 这暂且算是半自动吧.
接下来实现半自动的抓取所有页面摘要.(不知道sessionId多长时间过期,好奇…测试下…)
也希望大家能给我的小站沙加的博客增添点人气
阅读更多相关文章推荐
- Java数据抓取总结--2.使用Jsoup抓取当前天气情况
- 使用java jsoup抓取页面中的数据
- Jsoup简介——使用Java抓取网页数据
- Jsoup简介——使用Java抓取网页数据
- Jsoup简介——使用Java抓取网页数据
- Jsoup简介——使用Java抓取网页数据
- JAVA在线抓取网页中的元素的例子(使用JSoup包进行解析)
- 使用HttpClient和Jsoup进行简单数据抓取、解析
- JAVA在线抓取网页中的元素的例子(使用JSoup包进行解析)
- 使用Jsoup 抓取页面的数据
- 使用Jsoup 抓取(爬)页面的数据
- java爬虫问题二: 使用jsoup爬取数据class选择器中空格多选择怎么解决
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
- 使用Jsoup 抓取页面的数据
- 使用java开源工具httpClient及jsoup抓取解析网页数据
- 使用HttpClient和Jsoup定向抓取数据
- Java的 jsoup使用之抓取CSDN个人博客内容
- 在unittest中使用 logging 模块记录测试数据的方法
- java Jsoup 抓取页面数据
- 《程序员的第一年》---------- 【抓取网页数据】定时查寻淘宝搜索结果并用excel记录下来(HttpWebRequest与正则等的使用)