当前位置: 移动技术网 > IT编程>脚本编程>Python > scrapy urllib.parse 解析含有'/'字符ftp链接时异常的临时处理

scrapy urllib.parse 解析含有'/'字符ftp链接时异常的临时处理

2019年01月04日  | 移动技术网IT编程  | 我要评论

先给出修改部分代码:

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 就是残缺的。

所以对该段逻辑进行了 文首的修改。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网