用于从弹出窗口下载pdf的Python包

时间:2016-08-30 01:39:17

标签: python pdf web-scraping packages

我试图编写一个网络抓取工具,从剑桥图书在线获取一个给定的网址,下载单个章节并将它们连接成一个pdf,例如http://ebooks.cambridge.org/ebook.jsf?bid=CBO9781139171540

不幸的是,pdf似乎不会存储在任何类型的目录中,而是通过某种api来查询。

书中章节的示例网址可能类似于:

http://ebooks.cambridge.org/pdf_viewer.jsf?cid=CBO9781139171540A003&ref=false&pubCode=CUP&urlPrefix=cambridge&productCode=cbo

我不容易明白,如果我只是尝试下载该文件,我会得到什么样的文件,尽管该网址会在Chrome的pdf阅读器中打开所需的章节。

从其他阅读中,似乎存在解释器,如Splinter,用于在python中打开网页。

目前对我来说最可行的方法是通过像Splinter之类的东西在python脚本中打开页面,点击弹出窗口中打开pdf的相关链接,然后下载pdf从弹出窗口,人类可以通过Python完成。这种操作是否有一个很好的包装?

或者,非常感谢任何其他解决此问题的方法。

编辑:我应该澄清一下,我对传统BeautifulSoup方法的主要挑战是pdf的url不是实际的pdf本身,而是一个通过pdf加载pdf的html页面阿贾克斯。例如,我链接的章节网址(如果已下载)如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!--[if lt IE 7]> <html lang="en" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html lang="en" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html lang="en" class="no-js ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class='no-js'>
<!--<![endif]-->


    <head>
        <title>CBO9781139171540A003</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />





                <style type="text/css"> 
                    html, body, div, iframe { margin:0; padding:0; height:100%; }
                    iframe { display:block; width:100%; border:none; }
                </style>


    </head>

    <body>

        <div id="loading_icon" style="margin-top: 350px; text-align: center; min-height:678px;">
            <b>Please wait, page is loading...</b><br /><img width="208" height="13" src="images/loadingAnimation.gif"  alt="Loading..." />
        </div>



        <div id="base" class="container" style="display: none;">
            <div id="main" role="main"> 


            </div>
        </div>

        <script src='js/jquery.min.1.7.2.js' type='text/javascript'></script><noscript>Your browser does not support JavaScript!</noscript>    
        <script type="text/javascript">
            $(function(){   
                $.ajax({
                    type: "POST",
                    url: "pdf_info/CBO9781139171540A003",
                    success: function(data) {

                        var UA = "Python-urllib/3.5";
                        var OSindex = UA.indexOf("OS");
                        var OSver = UA.substr(OSindex, 6 );     
                        var ipad2ver = "OS 3_2";
                        var isIpad2 = ipad2ver <= OSver;

                        if(("Python-urllib/3.5".indexOf("iPad") > -1 && isIpad2) ||
                            ("Python-urllib/3.5".indexOf("iPhone") > -1)){
                                var dimension = data.split(",");
                                dimension[0] = parseFloat(dimension[0]) + 16;     
                                $("#main").append(
                                    $("<iframe />")
                                        .attr("id", "pdf_frame")
                                        .attr("style", "width:" + dimension[0] + "px; height:" + dimension[1] + "px;")
                                        .attr("src", "open_pdf/CBO9781139171540A003;jsessionid=A3BD36F983D3B975B34BD467BB14AC7E?pubCode=CUP&urlPrefix=cambridge&productCode=cbo&isSearch=false")
                                );
                        } else {
                            $("#main").append(
                                $("<iframe />")
                                    .attr("id", "pdf_frame")
                                    .attr("src", "open_pdf/CBO9781139171540A003;jsessionid=A3BD36F983D3B975B34BD467BB14AC7E?pubCode=CUP&urlPrefix=cambridge&productCode=cbo&isSearch=false")
                                );
                        }

                        $("#loading_icon").hide();
                        $("#base").show();                      
                    }
                });
            }); 

        </script>

    </body>

</html>

也许我只是不了解Ajax,但对于我应该用urllib和BeautifulSoup打开/下载的内容并不是很明显。

再次感谢!

0 个答案:

没有答案