我试图编写一个网络抓取工具,从剑桥图书在线获取一个给定的网址,下载单个章节并将它们连接成一个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打开/下载的内容并不是很明显。
再次感谢!