scrapy urllib.parse 解析含有'/'字符ftp链接时异常的临时处理
先给出修改部分代码:
urllib.parse
def _splitnetloc(url, start=0): # modified by liucheng at 20190103 at_index = url.find('@', start) # modified by liucheng delim = len(url) # position of end of domain part of url, default is end for c in '/?#': # look for delimiters; the order is NOT important wdelim = url.find(c, start) # find first of this delim # modified by liucheng at 20190103 if at_index > 0: wdelim = url.find(c, at_index) # modified by liucheng if wdelim >= 0: # if found delim = min(delim, wdelim) # use earliest delim position return url[start:delim], url[delim:] # return (domain, rest)
今天应产品需求,将天气数据按天获取,并写入ftp,方便交换任务入库或者直接处理。
天气数据直接使用中国天气预报网的页面解析获取。
然而在写ftp时,看到scrapy官方文档表示 可以直接使用内置的feed storage搞定。
省事当然OK。
settings.py文件中添加行:
FEED_URI = "ftp://xxx/xxx/xxx:password@xxxftp.xxx.com/weather_101020100.text"
按照配置,奈何怎么都报错,显示域名解析不正确。
百度异常信息无果。
Debug跟进,发现ftp地址解析严重异常。
问题代码部分:
def _splitnetloc(url, start=0): delim = len(url) # position of end of domain part of url, default is end for c in '/?#': # look for delimiters; the order is NOT important wdelim = url.find(c, start) # find first of this delim if wdelim >= 0: # if found delim = min(delim, wdelim) # use earliest delim position return url[start:delim], url[delim:] # return (domain, rest)
这边留着一个坑,只要存在'/',那么就取起始位置start到最新出现的'/'位置delim间的作为域domain。
这导致,当用户名或者密码中存在'/'时,获得的域domain 就是残缺的。
所以对该段逻辑进行了 文首的修改。