Closed jiaojiaodubai closed 5 months ago
之前万方翻译器获取PDF下载链接的代码比较奇特(encodeURIComponent(doc.title)
这一句感觉好随便啊),我不确定它现在是否还有效。麻烦有条件的朋友帮忙试一下,如果现在能用原来的万方翻译器抓取到PDF的话,我就把原来的代码移植过去。
function getPDF(newItem, doc) {
var ele = doc.querySelector("a.download") || doc.querySelector("span.title-id-hidden");
if (ele === null) return false;
var hiddenId = ele.getAttribute('href') || ele.innerText;
var tmp = hiddenId.match(/(\w+)_([^.]+)/);
if (tmp === null) return false;
// Z.debug(tmp)
return "https://oss.wanfangdata.com.cn/www/" + encodeURIComponent(doc.title) + ".ashx?isread=true&type=" + tmp[1] + "&resourceId=" + encodeURI(decodeURIComponent(tmp[2]));
}
万方医疗和万方数据虽然属于万方,不过对我来说,感觉类似知网和知网空间的感觉。怎么觉得想起来要拆分这个了?
之前万方翻译器获取PDF下载链接的代码比较奇特(encodeURIComponent(doc.title)这一句感觉好随便啊)
如果我没记错,这个下载PDF的代码是某个同学提的pr,当时我看有效果就并进去了。
万方医疗和万方数据虽然属于万方,不过对我来说,感觉类似知网和知网空间的感觉。怎么觉得想起来要拆分这个了?
我在修改万方的翻译器的时候,发现几乎每一个步骤都要判断当前页面是万方数据还是万方医学,这是因为万方医疗和万方数据的共同点仅仅在于接口兼容而已,它们的页面布局可以说毫不相干。仅仅为了最后一步scrape()
能共用,就迫使前面不得不瞻前顾后,代码写起来非常麻烦。
这里还有一个细节问题,就是万方医学的搜索页上显著地包含详情页的链接,我们可以用传统方法从链接打开详情页逐个抓取,而万方数据的搜索页面已经不含详情页的链接了(或许我们可以用id拼接,但我没有尝试)。
总之我认为拆分可以让万方医学以更轻量的方式来抓取,也能减少万方数据翻译器里过多的兼容包袱。
有几个朋友帮我测试了一下,使用原万方翻译器的情况下,只有校园网直连可以下PDF,ip认证和VPN用户都下不了。原先的方法可能钻了API的空子(一种有用但不规范的请求)。 PDF下载链接形如
https://oss.wanfangdata.com.cn/NewFulltext?type=conference&resourceId=12345678&transaction={...}
但transaction
参数非常复杂,很多属性的意义都搞不清楚。
经测试,原有方法仅能下载部分开放下载的PDF。我在网上买的帐号因为请求异常被封了……最终决定禁用不可靠的PDF下载,以免频繁发出不合理请求。
之前万方翻译器获取PDF下载链接的代码比较奇特(encodeURIComponent(doc.title)这一句感觉好随便啊)
好像是用来改文件名的
你现在看到的oss链接,我记得是原先版本通过在线阅读功能可以直接获得pdf的直链。既然目前暂时还没被ban,在能够实现完全模拟订单机制获取新版本下的pdf直链之前,请不要改动这部分
我在网上买的帐号因为请求异常被封了……最终决定禁用不可靠的PDF下载,以免频繁发出不合理请求。
如果你所在的单位没有购买wanfang的数据库,还是别尝试修改和调试下载的代码吧,保持原样
万方数据 假如url是可能加密过的长链接的话,最终url仍然是长链接,这个倾向取比较易于人读的短链接。
好像早已支持这个了?
万方数据 假如url是可能加密过的长链接的话,最终url仍然是长链接,这个倾向取比较易于人读的短链接。
好像早已支持这个了?
重新更新这个新版本已修复。