解决在爬虫时出现的 ‘NoneType‘ object has no attribute ‘text‘

第一次写博客,还请大家多多包涵,哪里有问题欢迎指出来😁
在练习豆瓣爬虫时,出现了如下问题
在这里插入图片描述
发现出错原因是这行代码:
在这里插入图片描述
这是在爬取每个电影的引言时出现的问题,虽然去掉.text后就不会报错,但是爬出来的数据不够简洁:
在这里插入图片描述
可以看到,引言部分并不是纯文本。出问题的原因是部分电影不存在引言,例如《寄生虫》:
在这里插入图片描述
这样在爬取时的返回值为空就会报错。
解决方法:可以再爬取引言时判断一下:
在这里插入图片描述
这样爬取时没有引言的电影也会返回‘None’而不是没有值。
最后附上完整的代码:

import re
import pandas as pd
from bs4 import BeautifulSoup
import requests

dic = {'title':[],'year':[],'country':[],'score':[],'type':[],'quote':[],'info':[]}

for i in range(10):
    num = i*25
    url = 'https://movie.douban.com/top250?start=' + str(num)
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36',
             'Cookie':'ll="118137"; bid=Z09uXxe952M; __utmc=30149280; __utmc=223695111; __gads=ID=4b427da7bc5772f5-224845a09fd0000a:T=1644801255:RT=1644801255:S=ALNI_MZjzCF75jIILQN_3fd-u7NP6SRptg; _vwo_uuid_v2=D56A762C89C42FDDA5D9A39180CE666CD|fd78ebaddcae1b97e1ff2dce11ab3848; __yadk_uid=f7iF27VrhvVcZEAghEePO6t5aDK5OY9c; dbcl2="218207941:QJtp/TAsvUU"; ck=M0Jq; __utmz=30149280.1644822630.5.2.utmcsr=accounts.douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/; __utmz=223695111.1644822630.5.2.utmcsr=accounts.douban.com|utmccn=(referral)|utmcmd=referral|utmcct=/; push_noty_num=0; push_doumail_num=0; __utmv=30149280.21820; _pk_ref.100001.4cf6=["","",1644885833,"https://accounts.douban.com/"]; _pk_id.100001.4cf6=b39bea3e15aaef3b.1644800668.7.1644885833.1644828119.; __utma=30149280.1729643724.1644800665.1644828119.1644885833.7; __utma=223695111.307665747.1644800665.1644828119.1644885833.7'
              }
    rqt = requests.get(url,headers = headers)
    bs = BeautifulSoup(rqt.text,'html.parser')
    bs = bs.find('ol',class_ = 'grid_view')
    for j in bs.find_all('li'):
        
        dic['title'].append(j.find('span',class_ = 'title').text)
        dic['year'].append(j.find('div',class_='bd').find('p').text.strip().split('\n')[1].split()[0])
        dic['country'].append(j.find('div',class_='bd').find('p').text.strip().split('\n')[1].split()[2])
        dic['score'].append(j.find('span',class_ = re.compile('rating_num')).text)
        dic['info'].append(j.find('p',class_ = '').text.strip().split('\n')[0].split('\xa0\xa0\xa0'))
        dic['type'].append(j.find('div',class_='bd').find('p').text.strip().split('\n')[1].split('/')[2])
        if j.find('span',class_='inq'):
            dic['quote'].append(j.find('span',class_='inq').text)
        else:
            dic['quote'].append('None')
        
df = pd.DataFrame(dic)

最后的结果:
在这里插入图片描述
第一次写博客,还请大家多多支持,有什么问题可以一起讨论!

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值