如何在Javascript lin后面下载和存储.txt文件

2024-10-01 17:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在这里下载.txt文件:http://www.namejet.com/Pages/Downloads.aspx

但是下载链接的格式我从来没有见过。。。在

<a id="ctl00_ContentPlaceHolder1_hlPreRelease0" class="sIcoTxt" rel="nofollow" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$hlPreRelease0','')">Wednesday, September 19, 2012</a>

我不知道从哪里开始,我需要一个脚本,访问下载页面,下载并存储此链接后面的文件?在


Tags: 文件txtcomidhttp链接downloadswww
1条回答
网友
1楼 · 发布于 2024-10-01 17:23:02

这里的链接是对javascript函数__doPostBack的调用。在

自动处理这个问题的唯一方法是下载脚本并在JS解释器中运行__doPostBack函数,并在适当的环境下运行。最简单的方法是在浏览器环境中编写脚本,例如使用Greasemonkey。在

但是,您可以通过下载和读取脚本,弄清楚__doPostBack的作用,并查看是否可以用Python中的信息实现相同的逻辑,从而可以将javascript:__doPostBack('ctl00$ContentPlaceHolder1$hlPreRelease0','')转换为可以实际下载的URL。在

举一个非常简单的例子,假设你发现了这个:

function __doPostBack(name, callback) {
  var url = 'http://' + window.location.hostname + '/postbacks/' + name + ".xml";
  var xhr = new XMLHttpRequest();
  xhr.open("POST", url, false);
  xhr.send();
  var xml = xhr.responseXML;
  if (callback) callback(xml);
}

所以,你应该这样做:

^{pr2}$

现在,当您获得与此正则表达式匹配的href时,请执行以下操作:

nexturl = 'http://' + urlparse.urlparse(lasturl).netloc + '/postbacks/' + m.groups(1) + '.xml'
u = urllib2.urlopen(nexturl, '')
xml = u.read()

如果JS非常复杂而且很难理解,那么使用浏览器的web开发工具来查看它在单击链接时下载了哪些url,然后对转换进行反向工程,可能会更简单一些。(当然,如果你只是抓取一些文件,你也可以从同一个地方在缓存中找到它们,然后就完成了。)

相关问题 更多 >

    热门问题