从ASP网站抓取JavaScript下载链接

Scrape JavaScript download links from ASP website

本文关键字:下载 链接 JavaScript 抓取 ASP 网站      更新时间:2023-09-26

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

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

当你在Javascript链接上遇到困难时,你可以试试Selenium: http://selenium-python.readthedocs.org/en/latest/getting-started.html

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.python.org")
time.sleep(3)   # Give your Selenium some time to load the page
link_elements = driver.find_elements_by_tag_name('a')
links = [link.get_attribute('href') for link in links]

您可以使用链接并将其传递给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=''>

所以,你只需要一个 POST 表单,针对这个 URL:

http://tsd.dlink.com.tw/downloads2008detail.asp

这是FF网络分析仪的一组数据示例。您只需要更改两个项目 - 从 JS 链接中抓取 - 您可以使用普通的抓取来获取它们:

  • 回车=确定
  • 型号类别=0
  • 型号Sno=0
  • ModelCategory_=行动方案
  • ModelSno_=1150
  • Model_Sno=
  • 模型Ver=
  • sel_PageNo=1
  • 操作系统=GPL

您可能会通过实验发现并非所有这些都是必需的。我确实尝试在浏览器中为此使用 GET,但看起来目标页面坚持使用 POST。

不要忘记在点击

和提交之间在刮板内留出相当长的时间,因为每次点击都代表远程服务器上的点击;我建议5秒,模拟人类延迟。如果你这样做得太快 - 如果你的连接良好,这很可能 - 远程端可能会认为你在DoSing他们,并可能阻止你的IP。记住刮擦的座右铭:做一个好的机器人!