#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. О, спасибо. Да, это работает. и спасибо за подробный ответ. вы великолепны.