我正在编写一个scrapy网络抓取工具,可以从我访问的网页中保存html。我还想保存我用其文件扩展名抓取的文件。
这是我到目前为止所拥有的 蜘蛛类
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):
...
是否有一种简单的方法可以检测链接是否以文件扩展名结尾并保存到该文件扩展名?我目前拥有的将保存为.html,无论扩展名如何。
我认为我可以删除
filename = '%s.html' % page
它会保存为自己的扩展名,但有些情况下我想保存为html,例如,如果它以aspx结尾
答案 0 :(得分:1)
试试这个......
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]
可能想要检查是否返回为空 - 对于“http://google.com”等最后没有.format
的情况。
答案 1 :(得分:0)
我最终做了
if not '.' in page:
fileName = '%s.html' % page
else:
fileName = page