Webscraping: ошибка ‘NoneType’ объект не имеет атрибута ‘text’

#python #web-scraping

#python #веб-очистка

Вопрос:

Я пытался очистить веб-сайт indeed как часть проектной работы. Я столкнулся с ‘NoneType’ объект не имеет атрибута ‘text’ при попытке получить резюме вакансии.

У кого-нибудь есть решение?

 def extract(page):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
    url = f'https://ae.indeed.com/jobs?q=data analystamp;l=dubaiamp;start={page}'
    r = requests.get(url, headers)
    soup = bs(r.content, 'html.parser')
    return soup

def transform(soup):
    div = soup.find_all('div', class_ ='jobsearch-SerpJobCard')
    for item in div:
        title = item.find('a').text.strip()
        company = item.find('span', class_ = 'company').text.strip()
        summary = item.find(name='div',attrs={'class':'summary'}).text.strip()
        
        jobs = {'title': title,
               'company': company,
               'summary': summary}
        joblist.append(jobs)
    return
joblist = []
c = extract(10)
transform(c)
print(joblist)
 

Сообщение об ошибке:

 AttributeError                            Traceback (most recent call last)
<ipython-input-65-eefd76c3693a> in <module>
     24 joblist = []
     25 c = extract(10)
---> 26 transform(c)
     27 print(joblist)

<ipython-input-65-eefd76c3693a> in transform(soup)
     11         title = item.find('a').text.strip()
     12         company = item.find('span', class_ = 'company').text.strip()
---> 13         summary = item.find(name='div',attrs={'class':'summary'}).text.strip()
     14 #         summary = item.find(name='li',attrs={'style':'margin-bottom:0px;'}).text
     15 #         for sum in summary:

AttributeError: 'NoneType' object has no attribute 'text'

 

Комментарии:

1. Ну, вы ожидаете item.find(name='div',attrs={'class':'summary'}) , что всегда что-то возвращать? Что делать, если нет резюме?

2. элемент не находит div, который class = summary, поэтому он возвращает объект NoneType

3. @OneCricketeer Спасибо за этот вопрос. Это помогло мне.

Ответ №1:

Я просто изменил код с помощью try, за исключением block. Это сработало нормально.

 try:
    summary = item.find(name='div',attrs={'class':'summary'}).text.strip()
except:
    summary = 'None'