• Python Scrapy抓取数据中文存utf8乱码问题

    继 http://blog.wdoc.info/note/79.html (在回调函数中加载新页面XPath)之后

    最近出现了 网页GB2312编码,无法正常转换为utf8存入数据库的问题

     网上大肆搜寻一番,说的编码转换一一试过,似乎问题不太好解决

    于是直接在命令行下 使用python    >>>scrapy shell  http://my.test.url

     加载页面之后输出类容 来看了下 (截取了一部分)测试片段 如下

    >>>tt = "\xe6\x98\xaf\xe4\xb8\x80\xe5\xae\xb6\xe4\xb8\x93\xe4\xb8\x9a\xe9\x94\x80\xe5\x94\xae\xe3\x80\x8a\xe9\x93\x85\xe9\x85\xb8\xe5\x85\x8d\xe7\xbb\xb4\xe6\x8a\xa4\xe8\x93\x84\xe7\x94\xb5\xe6\xb1\xa0\xe3\x80\x8b\xe3\x80\x81\xe3\x80\x8aUPS\xe4\xb8\x93\xe7\x94\xa8\xe8\x93\x84\xe7\x94\xb5\xe6\xb1\xa0\xe3\x80\x8b\xe3\x80\x81\xe3\x80\x8a\xe7\x9b\xb4\xe6\xb5\x81\xe5\xb1\x8f\xe4\xb8\x93\xe7\x94\xa8\xe8\x93\x84\xe7\x94\xb5\xe6\xb1\xa0\xe3\x80\x8b\xe3\x80\x81\xe3\x80\x8aEPS\xe4\xb8\x93\xe7\x94\xa8\xe8\x93\x84\xe7\x94\xb5\xe6\xb1\xa0\xe3\x80\x8b\xe3\x80\x81\xe3\x80\x8a\xe5\xa4\xaa\xe9\x98\xb3\xe8\x83\xbd\xe4\xb8\x93\xe7\x94\xa8\xe8\x93\x84\xe7\x94\xb5\xe6\xb1\xa0\xe3\x80\x8b\xe3\x80\x81\xe3\x80\x8a\xe9\x93\x85\xe9\x85\xb8\xe5\x85\x8d\xe7\xbb\xb4\xe6\x8a\xa4\xe8\x93\x84\xe7\x94\xb5\xe6\xb1\xa0\xe3\x80\x8b\xe3\x80\x81\xe3\x80\x8a\xe8\x83\xb6\xe4\xbd\x93\xe8\x93\x84\xe7\x94\xb5\xe6\xb1\xa0\xe3\x80\x8b\xef\xbc\x8c\xe5\x8c\x85\xe6\x8b\xac\xe5\xae\x89\xe8\xa3\x85\xe3\x80\x81\xe8\xb0\x83\xe8\xaf\x95\xe5\x8f\x8a\xe7\xbb\xb4\xe4\xbf\xae..."

    >>>print tt  

    直接乱码

    >>>print tt.decode('utf8','ignore')

    显示正常中文(ignore 在解码过程中直接忽略异常编码)

    但是在Scrapy中

    temp = urllib2.urlopen(newurl) #请求
    temp = temp.read() #读数据

    temp = temp.decode('utf8','ignore') # 这样会提示找不到默认编码...
    newresponse = HtmlResponse(newurl)
    newresponse._set_body(temp)

    于是最终解决方案

    temp = temp.decode('utf8','ignore').encode('gbk') 

     

    #过程比较潦草,仅做记录  欢迎指正

    #如果对python 如何使用Scrapy加载网页不熟悉的朋友,请先参阅 http://blog.vsfor.com/note/79.html

     

  • Scrapy在回调函数中直接请求新页面XPath

    使用Scrapy抓取数据时,往往需要将多个页面的内容拼凑到一起然后保存

    具体的需求情况就不啰嗦了

    如下是简单的测试代码

    #在函数中请求加载 新页面,片段代码
    from scrapy.http import Request,HtmlResponse  #载入相关类,如果头部有可以直接移除
    from scrapy.selector import HtmlXPathSelector  #同上
    import urllib2  #同上
    newurl = 'http://www.baidu.com'  #新页面的url (必须是包含协议名称的完整url)
    temp = urllib2.urlopen(newurl) #请求
    temp = temp.read() #读数据
    newresponse = HtmlResponse(newurl)
    newresponse._set_body(temp)
    temp = HtmlXPathSelector(newresponse) #构建新的xpath选择器
    print temp.select('//title/text()').extract()[0] #测试

     

    欢迎留言交流

     

  • Scrapy使用cx_Oracle插入数据时中文乱码问题

    使用Python的爬虫框架Scrapy时  往往需要将爬到的数据保存到数据库

    而这边用的是Oracle,环境配置之类的网上很多这边就不赘述了

    编码中涉及中文时 python文件开头添加 ##coding=utf-8 是必不可少的

    乱码解决:

    Linux 环境下,设置环境变量

    NLS_LANG=AMERICAN_AMERICA.AL32UTF8

     

    同理Windows环境下 乱码也跟这个没有设置的环境变量有关,但是并不是这样解决的

    Windows主要是通过os 模块修改环境变量,解决参考代码如下

    ##coding=utf-8
    # Define your item pipelines here
    #
    # Don't forget to add your pipeline to the ITEM_PIPELINES setting
    # See: http://doc.scrapy.org/topics/item-pipeline.html
    import cx_Oracle
    import os
    os.environ['NLS_LANG']="AMERICAN_AMERICA.AL32UTF8"

     

    当然网络上也有 os.environ['NLSLANG'] = 'SIMPLIFIED CHINESECHINA.UTF8' 的配置方案,如有同样问题,就测测看吧:)

click
©2010-2024 Jeen All Rights Reserved.Powered by emlog 京ICP备15058100号-1