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

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 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私