IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python3.7 ‘charmap‘ codec can‘t encode characters in position 12-18: |r |n无效的问题 -> 正文阅读

[Python知识库]python3.7 ‘charmap‘ codec can‘t encode characters in position 12-18: |r |n无效的问题

问题描述:1: ‘charmap’ codec can’t encode characters in position 12-18:
问题2: with 方法写入 txt 换行 \r\n \n 无效

# -*- coding=utf-8 -*-
import urllib.request
import re


class Funny():
    def __init__(self):
        self.working = True     # 一直采集开关

    # 1: 下载页面
    def download_page(self, url):
        user_header = {
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
            "cookie": "UM_distinctid=178d59b2235917-019291f17fc203-3f356b-1fa400-178d59b2236840;"
        }
        req = urllib.request.Request(url, headers=user_header)
        resp = urllib.request.urlopen(req)
        print("状态码是: " + str(resp.getcode()))
        print("测探的URL地址是 : " + resp.geturl())
        content = resp.read().decode('GBK')
        pattern = re.compile('<h2>([\s\S]*)<hr />', re.S)
        match_content = pattern.findall(content)    # 这里不能把匹配到的内容,传入写入方法,会写成一行,不会把 \n , \r\n 进行编译,不知道为什么。
        self.deal_page(match_content)

    # 2: 处理每页的段子 [ 取第一个<h2> 到 <hr /> 之间的内容 ]
    def deal_page(self, content):
        print("传过来的是内容是: " + str(content))
        # match_content = re.finditer(r'<h2>.*?</h2>', content)
        # print("匹配到的内容是: " + str(match_content))
        # match_content = re.search('<h2>([\s\S]*)<hr />', content) # 不能贪婪匹配
        # match_content = re.findall('<h2>([\s\S]*)<hr />', content)

        for part_content in content:
            part_content = part_content.replace("\\u3000", "")
            self.write_file(part_content)

    # 3: 把段子写入文件里面
    def write_file(self, content):
        print("开始写入内容")
        with open("b.txt", "a", encoding="utf-8") as f:     # 没有加 encoding="utf-8" ,报错: 'charmap' codec can't encode characters in position 12-18: character maps to
            f.write(content)
        print("内容写入完成")

    # 启动位置
    def main_entry(self, url):
        while self.working:
            self.download_page(url)
            continue_or_not = input("输入'no'进行中止: ")     # 如果有变化的 url ,让它在 else 里面进行,并且自增(我写的时候内涵段子好像已经挂了。)
            if continue_or_not == "no":
                print("已经终止操作")
                self.working = False


if __name__ == '__main__':
    base_url = "https://www.xuexila.com/duanzi/jingdianduanzi/1151197.html"
    funny_story = Funny()
    funny_story.main_entry(base_url)

问题解决: 如上代码,with open(filename, method, encoding) 加入第三个参数,解决第一个问题,
不能把匹配的内容直接当 string 传入,把它分段传入, 解决第2个不换行的问题。在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:07:41  更:2021-07-15 16:09:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:13:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码