NoneType object has no attribute find

本文介绍了解决在爬虫过程中遇到的'NoneType'objecthasnoattribute'find'错误的方法。通过确保BeautifulSoup解析成功后再调用find方法,避免了因解析不完全导致的错误。
摘要由CSDN通过智能技术生成

‘NoneType’ object has no attribute ‘find’

这是我的代码
是爬取的抖音网红信息
爬着爬着就出现了NoneType’ object has no attribute ‘find’
在这里插入图片描述

# -*- coding: utf-8 -*-
"""
Created on Tue May 26 09:15:33 2020

@author: MR li
"""
""""请求网页"""
import re
import os
import requests
from bs4 import BeautifulSoup
import bs4
import time
class DOUDOU():
    def getHTMLtext(self,url):
        
            try:
               
                #kv={'user-agent':'Mozilla/5.0'}
                response = requests.get(url,timeout=5)
                response.raise_for_status()   
                return response.text
            except: 
                return ""   
    def fillUnitvList(self,ulist,html):
                soup=BeautifulSoup(html,"html.parser")
                i=1
                for child in soup.tbody.findAll(re.compile('a')):  
                    url='https://kolranking.com'+child.get('href')
                    htmluser=self.getHTMLtext(url)  
                    soupuser=BeautifulSoup(htmluser,"html.parser") 
                    time.sleep(1)
                    douuser=soupuser.body.find('div','col-md-3 col-sm-12 align-center')                   
                    if douuser is not None: 
                        userimage=douuser.find(re.compile('img')).get('src')
                        username=douuser.find(re.compile('p')).string                   
                        douuser2=soupuser.body.findAll('div',attrs={'class':'col-md-6 col-sm-12'})
                        child1 =douuser2[0].findAll(re.compile('p'))
                        child2 =douuser2[1].findAll(re.compile('p'))
                        usersex=child1[0].string
                        usercity=child1[1].string
                        userbir=child1[2].string
                        userxing=child1[3].string
                        userwei=child1[4].string
                        userbye=child2[1].string
                        userlan=child2[2].string
                        #image=soupuser.body.findAll('p','big-num')
                        #image1=image[0].find(re.compile('img')).get('src')
                        #image2=image[1].find(re.compile('img')).get('src')
                        #image3=image[2].find(re.compile('img')).get('src')
                        ulist.append([userimage,username,usersex,usercity,userbir,userxing,userwei,userbye,userlan])
                       # print(userimage,username,usersex,usercity,userbir,userxing,userwei,userbye,userlan)
                        print("正在爬取",i,username)
                        i=i+1
                                               
    def printUnivList(self,ulist,num):
        print(ulist)


"""
图片下载
dyuserimg="D://douyin//"
path=dyuserimg+url.split('/')[-1]
    try:
        if not os.path.exists(dyuserimg):
            os.mkdir(dyuserimg)
        if not os.path.exists(path):
            r=requests.get(url)
            with open(path,'wb') as f:
                f.write(r.content)
                f.close()
                print("图片保存成功")
        else:
            print("图片下载失败")
    eccept:
        print(爬取是失败)
"""
if __name__ == '__main__':
    unifo=[]
    for i in range(3,7):
        url='https://kolranking.com/douyin/users?s=&category=&ot=DESC&order=follower_count&page='
        html=DOUDOU().getHTMLtext(url+str(i))
        DOUDOU().fillUnitvList(unifo, html)
    DOUDOU().printUnivList(unifo,6)
    


我是怎么解决的呢

ERR说的是 你这个类型没有这个方法

  1. 首先 我确定我爬的是静态页面
  2. pip install 也成功导入了库
  3. 确定你获取的不是空值
  4. 最终那就是你调用。find或fingall的对象有问题

我的程序是

for child in soup.tbody.findAll(re.compile(‘a’)):
url=‘https://kolranking.com’+child.get(‘href’)
htmluser=self.getHTMLtext(url)
soupuser=BeautifulSoup(htmluser,“html.parser”)
#问题所在位置
time.sleep(1)
douuser=soupuser.body.find(‘div’,‘col-md-3 col-sm-12 align-center’)

因为我是多页面爬取,存在频繁的BeautifulSoup解析页面,所以会出现解析不成功就执行方法的情况,所以我在解析后暂停一秒time.sleep(1),在去找标签就解决了问题
在这里插入图片描述

客观还是仅供参考吧 回答的没有什么权威性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值