Scrapy 保存可下载文件
Scrapy Save Downloadable Files
我正在编写一个 scrapy 网络爬虫,它可以从我访问的页面中保存 html。我还想用文件扩展名保存我抓取的文件。
这是我目前所拥有的
蜘蛛class
class MySpider(CrawlSpider):
name = 'my name'
start_urls = ['my url']
allowed_domains = ['my domain']
rules = (Rule (LinkExtractor(allow=()), callback="parse_item", follow= True),
)
def parse_item(self,response):
item = MyItem()
item['url'] = response.url
item['html'] = response.body
return item
pipelines.py
save_path = 'My path'
if not os.path.exists(save_path):
os.makedirs(save_path)
class HtmlFilePipeline(object):
def process_item(self, item, spider):
page = item['url'].split('/')[-1]
filename = '%s.html' % page
with open(os.path.join(save_path, filename), 'wb') as f:
f.write(item['html'])
self.UploadtoS3(filename)
def UploadtoS3(self, filename):
...
有没有一种简单的方法来检测 link 是否以文件扩展名结尾并保存到该文件扩展名?无论扩展名如何,我目前拥有的内容都会保存到 .html。
我想我可以删除
filename = '%s.html' % page
并且它会保存为它自己的扩展名,但有些情况下我想保存为 html 而不是,例如如果它以 aspx
结尾
试试这个...
import os
extension = os.path.splitext(url)[-1].lower()
#check if URL has GET request parameters and remove them (page.html?render=true)
if '?' in extension:
extension = extension.split('?')[0]
可能要检查 returns 是否为空 - 对于诸如“http://google.com”这样的情况,其中末尾没有 .format
。
我最后做了
if not '.' in page:
fileName = '%s.html' % page
else:
fileName = page
我正在编写一个 scrapy 网络爬虫,它可以从我访问的页面中保存 html。我还想用文件扩展名保存我抓取的文件。
这是我目前所拥有的 蜘蛛class
class MySpider(CrawlSpider):
name = 'my name'
start_urls = ['my url']
allowed_domains = ['my domain']
rules = (Rule (LinkExtractor(allow=()), callback="parse_item", follow= True),
)
def parse_item(self,response):
item = MyItem()
item['url'] = response.url
item['html'] = response.body
return item
pipelines.py
save_path = 'My path'
if not os.path.exists(save_path):
os.makedirs(save_path)
class HtmlFilePipeline(object):
def process_item(self, item, spider):
page = item['url'].split('/')[-1]
filename = '%s.html' % page
with open(os.path.join(save_path, filename), 'wb') as f:
f.write(item['html'])
self.UploadtoS3(filename)
def UploadtoS3(self, filename):
...
有没有一种简单的方法来检测 link 是否以文件扩展名结尾并保存到该文件扩展名?无论扩展名如何,我目前拥有的内容都会保存到 .html。
我想我可以删除
filename = '%s.html' % page
并且它会保存为它自己的扩展名,但有些情况下我想保存为 html 而不是,例如如果它以 aspx
结尾试试这个...
import os
extension = os.path.splitext(url)[-1].lower()
#check if URL has GET request parameters and remove them (page.html?render=true)
if '?' in extension:
extension = extension.split('?')[0]
可能要检查 returns 是否为空 - 对于诸如“http://google.com”这样的情况,其中末尾没有 .format
。
我最后做了
if not '.' in page:
fileName = '%s.html' % page
else:
fileName = page