在本地下载HTML页面(+ CSS,+图像)

时间:2015-11-25 10:38:27

标签: python web-scraping

我希望能够下载HTML页面(让我们说出这个实际问题!):

f = urllib2.urlopen('https://stackoverflow.com/questions/33914277')
content = f.read()       # soup = BeautifulSoup(content) could be useful?
g = open("mypage.html", 'w')
g.write(content)
g.close()

这样它在本地显示的方式与在线显示方式相同。目前这是(坏)结果:

http://gget.it/z208ggpf/4.jpg

因此,需要下载CSS,并修改HTML本身,使其指向此本地CSS文件......对于图像等也是如此。

如何做到这一点?(我认为应该比this answer简单,不能处理CSS,但是如何处理?库?)

1 个答案:

答案 0 :(得分:0)

由于css和图片文件属于CORS政策,因此您可以在本地html中查看这些文件。问题是未解析的URI。在html head部分你有smth。像这样:

    <head> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <link rel="stylesheet" type="text/css" href="/assets/8943fcf6/select.css" />
    <link href="/css/media.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="/assets/jquery.yii.js"></script>
    <script type="text/javascript" src="/assets/select.js"></script>
</head> 

显然/css/media.css表示基地址,例如。 http://example.com。要解析本地文件,您需要在本地html副本中将http://example.com/css/media.css作为 href 值。所以现在你应该解析并将基数添加到本地代码中:

    <head> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <link rel="stylesheet" type="text/css" href="http://example.com/assets/select.css" />
    <link href="http://example.com/css/media.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="http://example.com/assets/jquery.yii.js"></script>
    <script type="text/javascript" src="http://example.com/assets/select.js"></script>
</head> 

使用任何手段(js,php ...)

更新

由于本地文件还包含图像&#39; body 部分中的参考资料,您也需要解决它们。