2017-07-19 1129 views
1

我有一个脚本运行Scrapy和Splash,它从一个站点提取各种数据,但我现在试图找到一种制作每个页面的离线副本的方法。Python下载一个完整的网页(包括CSS)

我试图与Scrapy如下:

def parse(self, response): 
    filename = response.url.split("/")[-1] + '.html' 
    with open(filename, 'wb') as f: 
     f.write(response.body) 

这与urllib的:

def parse(self, response): 
    url = response.url 
    file_name = 'aaa.html' 
    with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file: 
     shutil.copyfileobj(response, out_file) 

这两者的做工精细,但只下载HTML到文件。我需要整个页面(包含CSS) - 那么有什么方法可以做到这一点,类似于使用谷歌浏览器手动保存网站时,将复制保存为“网页,完整”?我怀疑像Selenium这样的东西可能,但猜测它对我的应用程序来说太慢了(这需要100个,有时候是1000个URL)。谢谢。

回答

0

可以使用BeautifulSoup或Scrapy去通过下载HTML,并与一个提取的东西,SRC标签

更具体地说例如CSS将在下面的标记

<link rel="stylesheet" type="text/css" href=""> 

,然后下载href内容中的文件您的编码将需要更复杂

+0

谢谢,我想这个,我目前坚持编写响应,然后将它写出来作为HTML - 我得到错误TypeError:一个类似字节的对象是必需的,而不是当你使用'str'时唱替代功能。你有什么建议可以解决这个问题吗?谢谢。 –