Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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 0.24在导出到csv时返回时髦的字符?_Python_Csv_Scrapy - Fatal编程技术网

Python 如何阻止Scrapy 0.24在导出到csv时返回时髦的字符?

Python 如何阻止Scrapy 0.24在导出到csv时返回时髦的字符?,python,csv,scrapy,Python,Csv,Scrapy,我在Windows7上用Scrapy0.24和Pythong2.7.9抓取数据的页面返回64位“在查看页面源代码时,您可以看到的不是en-dash的数字实体代码&8211;。当然,这只是一个示例,页面上存在的所有特殊字符都会出现这种情况。我正在抓取的页面已在中声明 为了成功地将正确的字符写入.csv文件,我需要在我的Scrapy代码中执行哪些操作 经过一些新的研究之后,我又问了另一个问题。显然Python 2.7中的csv模块不支持Unicode。尽管我不知道如何使用这些信息来解决我的问题 这是

我在Windows7上用Scrapy0.24和Pythong2.7.9抓取数据的页面返回64位“在查看页面源代码时,您可以看到的不是en-dash的数字实体代码&8211;。当然,这只是一个示例,页面上存在的所有特殊字符都会出现这种情况。我正在抓取的页面已在中声明

为了成功地将正确的字符写入.csv文件,我需要在我的Scrapy代码中执行哪些操作

经过一些新的研究之后,我又问了另一个问题。显然Python 2.7中的csv模块不支持Unicode。尽管我不知道如何使用这些信息来解决我的问题

这是我的蜘蛛代码

products.py

我在命令提示符下使用以下命令运行spider:


scrapy crawl products-o items.csv

您是否尝试过使用sometextdata指定要写入文件的字符串数据的编码。编码为“utf-8”?我尝试过像这样指定utf-8:item['desc']=sel.css'tab1 productcontent'。extract.encode'utf-8'但这没有帮助。我还可以用什么方法尝试呢?我不太明白您使用什么方法将数据保存到文件中。如果您打印项目['desc']要进行标准输出,您是否看到与csv中相同的字符,或者它们的书写方式是否不同?从项目中取出数据时,您可能必须使用utf-8,而不是在放入数据时。当我使用print item['desc']时,我会在命令提示符中使用unicode,而不是像€“当我使用scrapy crawl products-o items.csv时,它出现在我的csv中。这不是我真正想要的UTF-8,但它更好。@jimmykup我无法重现这个问题。我已经运行了您的spider的本地版本,将desc extract更改为仅sel.extract,并且我在csv中获得了漂亮的Unicode字符。您得到的垃圾看起来像Unic。”ode被解释为ISO-8859-1-也许您可以尝试将正文强制加载为unicode:sel=scrapy.Selectortext=response.body\u作为unicode?
import scrapy
import urlparse

from allenheath.items import ProductItem
from scrapy.selector import Selector
from scrapy.http import HtmlResponse

class productsSpider(scrapy.Spider):
    name = "products"
    allowed_domains = ["http://www.allen-heath.com/"]
    start_urls = [
        "http://www.allen-heath.com/ahproducts/ilive-80/",
        "http://www.allen-heath.com/ahproducts/ilive-112/"
    ]

    def parse(self, response):
        for sel in response.xpath('/html'):
            item = ProductItem()
            item['model'] = sel.css('#prodsingleouter > div > div > h2::text').extract() # The value I'd like to use to name my images.
            item['shortdesc'] = sel.css('#prodsingleouter > div > div > h3::text').extract()
            item['desc'] = sel.css('#tab1 #productcontent').extract()
            item['series'] = sel.css('#pagestrip > div > div > a:nth-child(3)::text').extract()
            item['imageorig'] = sel.css('#prodsingleouter > div > div > h2::text').extract()
            item['image_urls'] = sel.css('#tab1 #productcontent .col-sm-9 img').xpath('./@src').extract()
            item['image_urls'] = [urlparse.urljoin(response.url, url) for url in item['image_urls']]
            yield item