鱼C论坛

 找回密码
 立即注册
查看: 1509|回复: 3

爬取文本DOXC写入内容报错

[复制链接]
发表于 2022-5-5 11:11:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
docx添加段落那一步总是报错TypeError: 'in <string>' requires string as left operand, not int
如果取消编码ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters


import requests
from bs4 import BeautifulSoup
from docx import Document


def get_page_code(url, header):
    page_code = requests.get(url, headers=header)
    return page_code.text


def get_word_content(page_code):
    word_code = BeautifulSoup(page_code, 'html.parser')
    word_content = word_code.find('div', attrs={"style": "border:1px solid #C8DBD3;padding:20px;line-height:24px;"})
    word_title = word_code.find('title')
    # print(word_title.text, word_content.text)
    # return word_content
    data = word_title.text, word_content.text
    return data


def save_word(data):
    document = Document()
    document.add_heading(data[0])
    print(data[0])
    for detail in data[1]:
        document.add_paragraph(detail.encode("gb2312"))  # 添加段落

    document.save(f'{data[0]}.docx')
#     with open(f'{data[0]}.docx', mode='w', encoding='utf-8') as f:
#         f.write(data[1])
#     f.close()




def main(url, header):
    page_code = get_page_code(url, header)
    word_content = get_word_content(page_code)
    save_word(word_content)


if __name__ == "__main__":
    url = "https://wenku.baidu.com/view/fb6324d8fa0f76c66137ee06eff9aef8941e48b0.html"
    header = {
        'User-agent': 'Googlebot'
    }
    main(url, header)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-6 11:49:54 | 显示全部楼层
本帖最后由 suchocolate 于 2022-5-6 13:14 编辑
def get_page_code(url, header):
    page_code = requests.get(url, headers=header)
    page_code.encoding = 'utf-8'
    return page_code.text
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-6 17:06:23 | 显示全部楼层
还是不行啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-6 18:51:01 | 显示全部楼层
def save_word(data):
    document = Document()
    document.add_heading(data[0])

    # print(len(data[1].split('/t')))
    file_doc = open("file.txt", 'w', encoding='gbk')
    file_doc.write(data[1])

    file_doc_ = open("file.txt", 'r', encoding='gbk')
    for detail in file_doc_.readlines():
        document.add_paragraph(detail.strip())
    document.save(f'{data[0]}.docx')
报的错是传入类型错误,但是强转str类型结果是一堆byte类型的字符串,得不到想要的结果。能确定的是
document.add_paragraph(detail.encode("gb2312")) 
这行用法有问题,你看看有啥好办法解决把。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 18:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表