#python #web-scraping #beautifulsoup
#python #веб-очистка #beautifulsoup
Вопрос:
Я создаю веб-оболочку с помощью python.
но я не могу исправить ошибку AttributeError: объект ‘NoneType’ не имеет атрибута ‘find’
это мой код
def extract_indeed_jobs(last_page):
jobs = []
# for page in range(last_page):
result = requests.get(f"{URL}amp;start={0*LIMIT}")
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class": "jobsearch-SerpJobCard"})
# print(results) It works!!
for result in results:
# print(results) It works!!
title = result.find("h2", {"class:": "title"})
# i think above line is the problem but i dont konw how to fix it
# 'results' have <h2> tag, i checked from printed out 'results'
print(title.find("a"))
return jobs
я думаю, что проблема title = result.find(«h2», {«class:»: «title»})
, но не знаю, как это исправить
этот код мне не помог
title = result.find("a", {"class":"jobtitle"})["title"]
Я ценю любой намек 🙂
весь код:
import requests
from bs4 import BeautifulSoup
LIMIT = 50
URL = f"https://kr.indeed.com/취업?q=pythonamp;limit={LIMIT}"
def extract_indeed_pages():
result = requests.get(URL)
soup = BeautifulSoup(result.text, "html.parser")
pagination = soup.find("div", {"class": "pagination"})
links = pagination.find_all('a')
pages = []
for link in links[:-1]:
pages.append(int(link.string))
max_page = pages[-1]
return max_page
def extract_indeed_jobs(last_page):
jobs = []
# for page in range(last_page):
result = requests.get(f"{URL}amp;start={0*LIMIT}")
soup = BeautifulSoup(result.text, "html.parser")
results = soup.find_all("div", {"class": "jobsearch-SerpJobCard"})
for result in results:
if not result:
results.remove(result)
for result in results:
title = result.find("h2", {"class:": "title"})
print(title.find("a"))
return jobs
Комментарии:
1. Я не думаю, что ошибка может исходить из этой строки. Это, вероятно
title.find("a")
. Показать полную обратную трассировку.2. @BekhruzNiyazov Я не думаю, что есть какой-либо способ
find_all()
вернуть список, который включаетNone
.3. @Barmar ну, если вы думаете об этом логически, должно быть. Если пользователь не получает ошибку,
for result in results
это означает, чтоresult
это список. Еслиresults
бы[ ]
было равно, не было бы никаких ошибок. Но если вы посмотрите на сообщение об ошибке, вы увидите это"NoneType object has no attribute find"
, и это означает, чтоresult
это равноNone
, и это означает, чтоNone
вresults
списке есть.4. @BekhruzNiyazov Есть два вызова
find()
. Посколькуfind_all()
гарантированно возвращает список объектов,result
не может бытьNone
. В процессе устранения ошибка должна быть в другом вызове,title.find("a")
, такtitle
и естьNone
.
Ответ №1:
Что происходит?
Вы пытаетесь find()
использовать заголовок таким образом, но вы никогда не получите совпадение, причина атрибута class:
:
title = result.find("h2", {"class:": "title"})
Как это исправить?
Просто удалите опечатку :
в вашем определении «class:»:
title = result.find("h2", {"class": "title"})
Пример
import requests
from bs4 import BeautifulSoup
soup = BeautifulSoup(requests.get(f"https://de.indeed.com/jobs?q=Vollzeitamp;l=Bremenamp;start=40").text, "html.parser")
results = soup.find_all("div", {"class": "jobsearch-SerpJobCard"})
for result in results:
title = result.find("h2", {"class": "title"})
print(title.a.text)
Вывод
Mediengestalter (Bildamp;Ton)/ Filmemacher in Teil-/Vollzeit
Freelance (m/w/d)
Immobilienmakler (m/w/x) mit Festgehalt und ungedeckelter Pr...
Fahrer (m/w/d) für Betonmischer in Bremen
Glasreiniger / Gehilfe Vollzeit
Helfer Verpackung (m/w/d)
Ehrenamtliche Helfer (m/w/d)