Flask не выводит нужные мне строки 'title' и 'link'
from flask import Flask, render_template, request, redirect
from parser import get_jobs
app = Flask('Job')
db = {}
@app.route('/')
def home():
return render_template('home.html')
@app.route('/report')
def report():
keyword = request.args.get('keyword')
if keyword is not None:
keyword = keyword.lower()
getDb = db.get(keyword)
if getDb:
jobs = getDb
else:
jobs = get_jobs(keyword)
db[keyword] = jobs
print(jobs)
else:
return redirect('/')
return render_template('report.html', searchBy=keyword, resultsNumber=len(jobs), jobs=jobs)
app.run()
Это сам Flask
import requests
from bs4 import BeautifulSoup
ITEMS = 100
headers = {
'Host': 'hh.ru',
'User-Agent': 'Safari',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive'
}
def extract_max_page(url):
hh_request = requests.get(url, headers=headers)
# print(hh_request)
soup = BeautifulSoup(hh_request.text, 'html.parser')
pages = []
pagenator = soup.find_all("span", {'class': 'pager-item-not-in-short-range'})
for page in pagenator:
pages.append(int(page.find("a").text))
return pages[-1]
def extract_job(html):
title = html.find('a').text
link = html.find('a')['href']
# location = html.find('div', {'data-qa': 'vacancy-serp__vacancy-address'})
return {
'Название вакансии': title,
'Ссылка': link
}
def extract_jobs(last_page, url):
jobs = []
for page in range(last_page):
print(f'Headhunter: парсинг страницы {page}')
result = requests.get(f'{url}&page={page}', headers=headers)
# print(result.status_code)
bsoup = BeautifulSoup(result.text, 'lxml')
results = bsoup.find_all('div', {'class': 'vacancy-serp-item'})
for result in results:
job = extract_job(result)
jobs.append(job)
return jobs
def get_jobs(keyword):
url = f'https://hh.ru/search/vacancy?area=1&schedule=remote&text={keyword}¤cy_code=RUR&L_save_area=true&page=0&items_on_page={ITEMS}'
max_page = extract_max_page(url)
jobs = extract_jobs(max_page, url)
return jobs
Это парсер
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Поиск работы на hh.ru</title>
<style>
section{
display: grid;
gap: 20px;
grid-template-columns: repeat(2, 1fr);
}
</style>
</head>
<body>
<h1>Результаты поиска</h1>
<h3>Найдено {{resultsNumber}} результатов по запросу: {{searchBy}}</h3>
<section>
<h4>Название вакансии</h4>
<h4>Ссылка</h4>
{% for job in jobs %}
<span>{{job.title}}</span>
<a href="{{job.link}}" target="_blank">Перейти</a>
{% endfor %}
</section>
</body>
</html>
Код страницы
Ответы (1 шт):
Автор решения: miha_tormoz
→ Ссылка
Поменял значения Название и Ссылка. Всё заработало.
Было:
def extract_job(html):
title = html.find('a').text
link = html.find('a')['href']
# location = html.find('div', {'data-qa': 'vacancy-serp__vacancy-address'})
return {
'Название вакансии': title,
'Ссылка': link
}
Стало:
def extract_job(html):
title = html.find('a').text
link = html.find('a')['href']
# location = html.find('div', {'data-qa': 'vacancy-serp__vacancy-address'})
return {
'title': title,
'link': link
}