scrapy urllib.parse 解析含有'/&#3…

2019-01-03 09:58:21来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

先给出修改部分代码:

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

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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:python学习--day01

下一篇:Django2.1简介及安装