从ASP网站抓取JavaScript下载链接

从ASP网站抓取JavaScript下载链接,javascript,python,asp.net,web-scraping,Javascript,Python,Asp.net,Web Scraping,我正在尝试从下载所有文件以进行备份和镜像,但是我不知道如何正确解析JavaScript链接 我需要在命名文件夹中以相同的方式组织所有下载。例如,在第一个文件夹中,我有一个名为“DAP-1150”的文件夹,其中有一个名为“DAP-1150 A1 FW v1.10”的文件夹,其中包含文件“DAP1150A1_FW110b04_FOSS.zip”,依此类推。我曾尝试在Python中使用beautifulsoup,但它似乎无法正确处理ASP链接。当您遇到Javascript链接时,可以尝试一下Selen

我正在尝试从下载所有文件以进行备份和镜像,但是我不知道如何正确解析JavaScript链接


我需要在命名文件夹中以相同的方式组织所有下载。例如,在第一个文件夹中,我有一个名为“DAP-1150”的文件夹,其中有一个名为“DAP-1150 A1 FW v1.10”的文件夹,其中包含文件“DAP1150A1_FW110b04_FOSS.zip”,依此类推。我曾尝试在Python中使用beautifulsoup,但它似乎无法正确处理ASP链接。

当您遇到Javascript链接时,可以尝试一下Selenium:

您可以使用这些链接并将它们传递到
urllib2
,以相应地下载它们。 如果您需要的不仅仅是脚本,我可以向您推荐Scrapy和Selenium的组合:

下面是它正在做的事情。我只是使用Firefox中的标准网络检查器来快照POST操作。请记住,正如我指出的,这不是一个写得特别好的网站——根本不应该使用JS/POST

首先,这里是JS-非常简单:

function oMd(pModel_,sModel_){
obj=document.form1;
obj.ModelCategory_.value=pModel_;
obj.ModelSno_.value=sModel_;
obj.Model_Sno.value='';
obj.ModelVer.value='';
obj.action='downloads2008detail.asp';
obj.submit();
}
写入这些字段的:

<input type=hidden name=ModelCategory_ value=''>
<input type=hidden name=ModelSno_ value=''>
下面是来自FF网络分析仪的一组数据示例。您只需要更改两个项目-从JS链接抓取-您可以通过普通抓取来抓取它们:

  • 输入=确定
  • ModelCategory=0
  • ModelSno=0
  • 模型类别=DAP
  • 型号n=1150
  • 模型=
  • 建模者=
  • 选择页面编号=1
  • OS=GPL
你可能会通过实验发现,并非所有这些都是必要的。我确实尝试过在浏览器中使用GET,但目标页面似乎坚持使用POST


别忘了在点击和提交之间在你的刮板上留下一段相当长的时间,因为每一次点击都代表着远程服务器的成功;我建议5秒,模拟人的延迟。如果你这么做太快——如果你的连接很好,这一切都是可能的——远程端可能会认为你正在给它们加药,并可能会阻塞你的IP。记住刮削的座右铭:做一个好机器人

我认为硒对这一点来说可能是杀伤力过大了。我注意到,一旦你点击了一个链接,它就会进行一次POST提交(因为结果页面不能在没有询问用户的情况下刷新)。因此,了解点击链接的作用——它可能会在表单中插入一个值并提交它。在你的刮削系统中,你需要做的就是模仿它,使用刮削的链接来计算出你需要什么输入。是的,我觉得刮削是一种方式,我需要为下载创建文件夹结构,并生成下载和路径的完整列表,以便在发生更改时排队和更新。我已经尝试了许多方法,但仍然无法使任何东西正常工作,这个网站看起来很奇怪。我想我需要某种能够正确地钩住jquery的刮刀,但我不知道如何做到这一点。我可以使用timeline功能跟踪chrome中的所有调用,但我不知道如何将其应用到scrapy或类似的东西中。不,您根本不需要挂接jQuery或使用JavaScript。请看。我想我刚才在scrapy中使用了一个可用的xpath,它使用了一个chrome插件“//strong/a”提供了至少所有的链接。使用hxs.select(“//strong/a/@href”).extract()从scrapy shell中,我似乎能够获得单个页面所需的信息。但是,相同的路径似乎不适用于抓取页码。为此,我得到了“//tr[21]/td/table/tbody/tr/td/a”,但看起来scrapy根本不解释“tbody”,有没有其他方法来为scrapy找到正确的xpath?我刚刚发现,我可以像这样修改页面请求以增加页面
<input type=hidden name=ModelCategory_ value=''>
<input type=hidden name=ModelSno_ value=''>
http://tsd.dlink.com.tw/downloads2008detail.asp