python爬虫——小白一只 2022-08-13 09:37 采纳率: 66.7%
浏览 65
已结题

f.write(book_content.text)报错

我这几行代码哪里错了, f.write(book_content.text)一直在报错

img

with open('./book/' + book_titil + '.text' , 'a' , encoding='utf-8') as f:
f.write(book_content.text)
print('下载成功',book_titil)

  • 写回答

3条回答 默认 最新

  • starlight_2007 2022-08-13 14:03
    关注

    可能是目标网页内容错误,导致语句“book_content = soup.find('div',id='content')”没有获取到id='content'的div标签。(报错简析见文末)
    这类错误非常常见(尤其是一些运维不认真、运行得不到高标准保障的小说网站),其实就是目标网页内容一片空白,或者是网页上只有报错信息,这都属于网站没有正确将数据分配到子网页上,不用太担心,只要在代码里添加try结构去捕获异常、跳过空白网页就行了。
    像这样:

    def get_book(url):
        error_links=[]
        ......
        for book_info in book_data:
            try:
                ......
            except AttributeError:
                error_links.append(book_url)
    

    当然,也可以像上例所示的那样添加error_links列表,获取引发报错的网页地址,核实缺失的信息,再通过其他渠道获取缺失的小说内容。
    注意:一定要把try塞到for循环里去,否则程序运行一半就崩了。还有,要先保证没有其他因素引发AttributeError(如语法不规范),否则会有异常的错误捕获来误导。

    简析报错信息:

    AttributeError: 'NoneType' object has no attribute 'text"
    File "C: \Users (Administrator(Desktop(PythoniRV\book_spider.py", line 58, in get_book
        f.write(book_content. text)
    File "C: \Users (Administrator(Desktop(PythoniRV小\book_spider.py", line 67, in <module>
        get_book(url)
    

    这个报错信息意味着自定义函数get_book(url)中的book_content变量没有获取到本次的值,只不过被本次的初始化操作清空了上一次的赋值。而这个变量用于储存获取到的目标网页的id="content"的div标签的文字信息,它没有被赋值,就说明目标网页不存在这一标签,或是目标网页这一标签没有文字信息。
    说白了,不是目标网页的服务器分配信息的时候出错了,就是目标网址指向了其他的网页。当然,大多数时候是前者。
    您可以采用上面代码块里的方式捕获异常网页,再去人工查看网页,应该八九不离十。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月22日
  • 已采纳回答 8月14日
  • 创建了问题 8月13日

悬赏问题

  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding