Python 如何在Javascript链接后下载并存储.txt文件

Python 如何在Javascript链接后下载并存储.txt文件,python,screen-scraping,web-scraping,Python,Screen Scraping,Web Scraping,我正在尝试在此处下载.txt文件: 但是下载链接的格式我以前没见过 <a id="ctl00_ContentPlaceHolder1_hlPreRelease0" class="sIcoTxt" rel="nofollow" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$hlPreRelease0','')">Wednesday, September 19, 2012</a> 我不知道从哪里开始,我

我正在尝试在此处下载.txt文件:

但是下载链接的格式我以前没见过

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


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

这里的链接是对javascript函数的调用
\uuuDoPostBack

自动处理此问题的唯一方法是下载脚本并在具有适当环境的JS解释器中运行
\uu doPostBack
函数。最简单的方法是从浏览器环境内部编写脚本,例如使用Greasemonkey

但是,您可以通过下载和阅读脚本,弄清楚
\uu doPostBack
的作用,并查看您是否可以使用所拥有的信息在Python中实现相同的逻辑,从而半自动地处理此问题,这样您就可以转换
javascript:u doPostBack('ctl00$ContentPlaceholder 1$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);
}
所以,你可以这样做:

r = re.compile(r"javascript:__doPostBack\('(.*?)','')")
nexturl = 'http://' + urlparse.urlparse(lasturl).netloc + '/postbacks/' + m.groups(1) + '.xml'
u = urllib2.urlopen(nexturl, '')
xml = u.read()
现在,当您获得与此正则表达式匹配的href时,您可以执行以下操作:

r = re.compile(r"javascript:__doPostBack\('(.*?)','')")
nexturl = 'http://' + urlparse.urlparse(lasturl).netloc + '/postbacks/' + m.groups(1) + '.xml'
u = urllib2.urlopen(nexturl, '')
xml = u.read()
如果JS非常复杂且难以理解,那么使用浏览器的web开发工具在单击链接时查看它下载的URL,然后对转换进行反向工程可能会更简单。(当然,如果您只抓取了几个文件,也可以从同一个位置在缓存中找到它们,然后就完成了。)

尝试在单击链接时使用charles代理()捕获请求,然后编写python函数复制它。