0

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

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

4

2 回答 2

0

这就是它正在做的事情。我刚刚使用 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=''>

因此,您只需要一个针对此 URL 的 POST 表单:

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

这是来自 FF 网络分析器的一组示例数据。您只需要更改两项 - 从 JS 链接抓取 - 您可以通过普通刮擦来抓取:

  • 输入=确定
  • 型号类别=0
  • 型号Sno=0
  • ModelCategory_=DAP
  • 型号Sno_=1150
  • 型号_Sno=
  • 型号版本=
  • sel_PageNo=1
  • 操作系统=GPL

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

不要忘记在点击和提交之间在爬虫中留出相当长的时间,因为每一次都代表远程服务器上的一次点击;我建议 5 秒,模拟人为的延迟。如果您这样做太快 - 如果您的连接良好,那么很可能 - 远程端可能会认为您正在对它们进行 DoSing,并且可能会阻止您的 IP。记住刮痧的座右铭:做一个好机器人!

于 2013-10-23T11:39:30.437 回答
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

于 2013-10-22T15:35:45.900 回答