Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一个站点上的Scrapy正则表达式可能不使用正常编码_Python_Regex_Character Encoding_Scrapy_Scrapy Spider - Fatal编程技术网

Python 一个站点上的Scrapy正则表达式可能不使用正常编码

Python 一个站点上的Scrapy正则表达式可能不使用正常编码,python,regex,character-encoding,scrapy,scrapy-spider,Python,Regex,Character Encoding,Scrapy,Scrapy Spider,所以对于20+的网站,我有这个蜘蛛爬行通过,所有的价格项目收益刚刚好。。。然而,在这个特定的网站上有一个非常恼人的问题 当我从特定产品中提取价格信息时,在没有任何MapCompose/Regex清理的情况下自然返回的信息如下: “14,55\xa0欧元”,或者更令人恼火的是: “9\xa0600,00\xa0欧元” 在你提问之前,我已经尝试了我能想到的每一种组合,通常我会这样做: productLoader.add_xpath('blah', 'blah', MapCompose(lambda

所以对于20+的网站,我有这个蜘蛛爬行通过,所有的价格项目收益刚刚好。。。然而,在这个特定的网站上有一个非常恼人的问题

当我从特定产品中提取价格信息时,在没有任何MapCompose/Regex清理的情况下自然返回的信息如下:

“14,55\xa0欧元”,或者更令人恼火的是: “9\xa0600,00\xa0欧元” 在你提问之前,我已经尝试了我能想到的每一种组合,通常我会这样做:

productLoader.add_xpath('blah', 'blah', MapCompose(lambda i: i.lstrip(punctuation)
    .strip().replace('"', '').replace('.', ','), re = '[^\\d]+'))
甚至尝试正则表达式,比如:

'\b\d[\d,.]*\b' 还有无数其他人,无论是在MapCompose内部还是在没有MapCompose的情况下 我甚至尝试在MapCompose中使用re.sub,例如:

?\xa0只是一个简单的例子

例如,下面是一些包含价格值的HTML:

<div class="price-box price-final_price" data-role="priceBox" data-product-id="19815">
<span class="price-container price-final_price tax weee"
         itemprop="offers" itemscope itemtype="http://schema.org/Offer">
        <span  id="product-price-19815"                data-price-amount="7490"
        data-price-type="finalPrice"
        class="price-wrapper ">
        <span class="price">7 490,00 €</span>    </span>
                <meta itemprop="price" content="7490" />
        <meta itemprop="priceCurrency" content="EUR" />
    </span>
</div>
另一个可能更容易在程序中消化的选项是使用页面中该价格信息的其他位置。在上面的同一个HTML片段中,您可以看到:

    <meta itemprop="price" content="7490" />
    <meta itemprop="priceCurrency" content="EUR" />
该部分还包括:


为什么不捕获价格,然后再将其分回来。*?\d+[,]\d****,即捕获组1。您也可以尝试将这些十六进制转换为空格,例如\\x[a-fA-F0-9]{2}转换为空格“”,然后再使用\b\d[\d,.]*\b'我会尝试,谢谢!
    <meta itemprop="price" content="7490" />
    <meta itemprop="priceCurrency" content="EUR" />
<meta property="product:price:amount" content="7490"/>
<meta property="product:price:currency" content="EUR"/>