请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

微信公众号:
crossincode
 找回密码
 立即加入
查看: 533|回复: 2

scrapy

[复制链接]

2

主题

0

好友

22

积分

新手上路

Rank: 1

发表于 2019-4-26 16:08:47 |显示全部楼层
win10 python3.70
请crossin老师和大佬们看看

scrapy 框架  scrapy crawl xxxx -o xxx.json -t json

import scrapy

class RunnoobSpider(scrapy.Spider):
    name = 'runnoob_spider'
    allowed_domains = ['runoob.com']
    start_urls = ['http://www.runoob.com/w3cnote']

    def parse(self, response):
        for LinkTitle in response.css('div.post-intro'):
            yield {
                'title': LinkTitle.xpath('h2/a/@title').get().encode('utf-8').decode('unicode_escape'),
## 这里尝试过 latin-1 utf-8 unicode_escape 排列组合9种应该都试过了 输出
                'link': response.urljoin(LinkTitle.xpath('h2/a/@href').get()),
                'desc': LinkTitle.xpath('p/text()').get(default='no content').strip(),
            }
        for next_page in response.css('li.next-page > a::attr(href)'):
            if int(next_page.get().split('/')[-1]) < 2:
                yield response.follow(next_page, self.parse)

输出的json (这里用的 encode('utf-8').decode('unicode_escape')  

{"title": "localstorage \u00e5\u00bf\u0085\u00e7\u009f\u00a5\u00e5\u00bf\u0085\u00e4\u00bc\u009a", "link": "http://www.runoob.com/w3cnote/localstorage-spec.html", "desc": "HTML API\r\nlocalstorage \u5728\u6d4f\u89c8\u5668\u7684 API \u6709\u4e24\u4e2a\uff1alocalStorage \u548csessionStorage\uff0c\u5b58\u5728\u4e8e window \u5bf9\u8c61\u4e2d\uff1alocalStorage \u5bf9\u5e94 window.localStor..."},
{"title": "Mac OS SSH \u00e4\u00bd\u00bf\u00e7\u0094\u00a8 PEM \u00e6\u0096\u0087\u00e4\u00bb\u00b6\u00e7\u0099\u00bb\u00e5\u00bd\u0095", "link": "http://www.runoob.com/w3cnote/mac-os-ssh-pem.html", "desc": "\u9996\u5148\u4fee\u6539 PEM \u7684\u6743\u9650\uff1a\r\nsudo chmod 600 key.pem\r\nMac OS \u8fde\u63a5\u670d\u52a1\u5668\u4f7f\u7528 PEM \u6587\u4ef6\u7684\u547d\u4ee4\u5982\u4e0b\uff1a\r\n\r\n\r\nssh -i key.pem root@IP\r\n\r\n\r\n\u4f60\u4e5f\u53ef\u4ee5\u4f7f..."},
{"title": "\u00e5\u0085\u00b3\u00e4\u00ba\u008e\u00e7\u00a8\u008b\u00e5\u00ba\u008f\u00e5\u0091\u0098\u00e9\u0084\u0099\u00e8\u00a7\u0086\输出在python shell 里面就会正常展示为中文字符 真是逼疯我了。。


回复

使用道具 举报

158

主题

37

好友

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2019-4-29 14:01:42 |显示全部楼层
你搜索下 scrapy 设置编码格式,设置为 utf8

仅供参考:
  1. # 在scrapy的settings.py文件中添加如下设置

  2. # 修改编码为utf-8
  3. FEED_EXPORT_ENCODING = 'utf-8'
复制代码
这是你问题的关键。如果没有设置好,对错误的结果再手动处理就复杂了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

22

积分

新手上路

Rank: 1

发表于 2019-5-3 12:11:44 |显示全部楼层
谢谢老师
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|Archiver|手机版|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2020-10-1 12:57 , Processed in 0.053707 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部