Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘text’ при использовании BeautifulSoup

#python #beautifulsoup #python-requests

#python #beautifulsoup #python-запросы

Вопрос:

Я запускаю следующий код из учебника YouTube, но когда я хочу получить текст из класса .totalcount , я получил сообщение об NoneType Object has no attribute "text" ошибке.

На самом деле в обучающем видео это сработало. Любая помощь? Если подробно, это будет потрясающе. Заранее спасибо.

 url = "https://newyork.craigslist.org/"
site = requests.get(url)
soup = BeautifulSoup(site.text, "html.parser")

sub_link = soup.select("#jjj0 a")
for l in sub_link:
    jobcat = l.text
    joburl = "https://newyork.craigslist.org/"   l.get("href")
    #print(joburl)
    r = requests.get(joburl)
    soup2 = BeautifulSoup(r.text, "html.parser")
    #for total in soup2.select_one("span", class_ = "totalcount"):
        #print(total)
    total = soup2.select_one(".totalcount").text
    #total  = soup2.find("span", class_ = "totalcount").text.strip()

    print(total)
 

Ответ №1:

Я попытался запустить ваш код и откомментировал инструкцию print для joburl .

На первой итерации он показывает

 https://newyork.craigslist.org//d/accounting-finance/search/acc
 

Обратите внимание, что после базовой части у него есть двойная косая https://newyork.craigslist.org черта.

При открытии этого в браузере отображается страница 404 Not Found.

Многие веб-серверы (удобно) разрешат для вас несколько косых черт в URL-адресах, тем самым избегая таких неприятных ситуаций, которые могут возникнуть. Похоже, что на этом сайте этого нет.

Способ ее устранения — удалить завершающую косую черту из этой строки:

 joburl = "https://newyork.craigslist.org/"   l.get("href")
 

Но вместо этого лучше удалить его из того места, где вы определяете базу url поверх вашего файла.

Работает следующее:

 from bs4 import BeautifulSoup

import requests

url = "https://newyork.craigslist.org"
site = requests.get(url)
soup = BeautifulSoup(site.text, "html.parser")

sub_link = soup.select("#jjj0 a")
for l in sub_link:
    jobcat = l.text
    joburl = url   l.get("href")
    # print(joburl)
    r = requests.get(joburl)
    soup2 = BeautifulSoup(r.text, "html.parser")
    total = soup2.select_one(".totalcount").text
    print(total)
 

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

1. О, спасибо. Да, это работает. и спасибо за подробный ответ. вы великолепны.