【问题标题】:Python Web Crawler for JavaScript Generated URLs用于 JavaScript 生成的 URL 的 Python Web 爬虫
【发布时间】:2015-10-08 22:36:56
【问题描述】:

我正在尝试使用一些 Python 网络爬虫从网站下载大约 3000 个 PDF。但是,这些 PDF 的 URL 是由 JavaScript 函数生成的。所以,我想知道是否有任何关于如何实现这一点的教程?

例如链接到Alberto European Hairspray (Aerosol) - All Variants的URL会在点击onclick="javascript:__doPostBack('ctl00$placeBody$gridView$gridView','DocumentCenter.aspx?did={0}$0&#39后生成。 所以问题是如何让网络爬虫获取计算出来的 URL。

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
<tbody>
    <tr>
        <td>
            <input type="image" src="App_Graphics/PDFDocument.gif" alt="MSDS" onclick="javascript:__doPostBack(&#39;ctl00$placeBody$gridView$gridView&#39;,&#39;DocumentCenter.aspx?did={0}$0&#39;);return false;" />
        </td>
        <td><a href="javascript:__doPostBack(&#39;ctl00$placeBody$gridView$gridView&#39;,&#39;MSDSDetail.aspx?did={0}$0&#39;)">Alberto European Hairspray (Aerosol) - All Variants</a>
        </td>
        <td>Unilever PLC</td>
        <td>8131-01</td>
    </tr>
    <tr class="row-alternate">
        <td>
            <input type="image" src="App_Graphics/PDFDocument.gif" alt="MSDS" onclick="javascript:__doPostBack(&#39;ctl00$placeBody$gridView$gridView&#39;,&#39;DocumentCenter.aspx?did={0}$1&#39;);return false;" />
        </td>
        <td><a href="javascript:__doPostBack(&#39;ctl00$placeBody$gridView$gridView&#39;,&#39;MSDSDetail.aspx?did={0}$1&#39;)">Alberto European Mousse (Aerosol) - All Variants</a>
        </td>
        <td>Unilever PLC</td>
        <td>8132-01</td>
    </tr>
</tbody>

【问题讨论】:

    标签: javascript python web-scraping


    【解决方案1】:

    你不能。使用 JavaScript 解释器(例如SpiderMonkey)执行代码,然后继续进行 HTML 解析。使用 Qt 的 WebKit 也是一种不错的方法,但可能会更慢。

    【讨论】:

    • @tao.hong 不客气。我有同样的问题,我知道这有点令人失望:P
    【解决方案2】:

    另一种选择是您可以使用 Selenium 到 execute js 并获取计算的 url。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多