从ASP网站获取JavaScript下载链接

时间:2013-10-22 13:53:53

标签: javascript python asp.net web-scraping

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

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

2 个答案:

答案 0 :(得分:0)

当您使用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的组合: selenium with scrapy for dynamic page

答案 1 :(得分:0)

这是它正在做的事情。我刚刚使用Firefox中的标准网络检查器来快照POST操作。请记住,就像my other answer我指出的那样,这不是一个写得特别好的网站 - 根本不应该使用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链接抓取 - 你可以抓住那些普通的刮擦:

  • 输入= OK
  • ModelCategory = 0
  • ModelSno = 0
  • ModelCategory_ = DAP
  • ModelSno_ = 1150
  • Model_Sno =
  • ModelVer =
  • sel_PageNo = 1
  • OS = GPL

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

不要忘记在点击和提交之间留出相当多的时间在你的刮刀内,因为每一个都代表远程服务器上的命中;我建议5秒,模仿人类延迟。如果你这样做太快 - 如果你的连接很好,那么远程也可能会认为你正在执行它们,并且可能会阻止你的IP。记住刮刮的座右铭:做个好机器人!