Как сделать правильно сохранение списка в python?
Я написал парсер (для себя), который собирает следующие данные: название вакансии, название компании и ссылку на вакансию.
from bs4 import BeautifulSoup
import requests
import json
def parse():
vacancies_dict = {}
vacancy_array = []
with open('index.html', encoding="utf-8") as file:
src = file.read()
soup = BeautifulSoup(src, "lxml")
vacancies = soup.find_all("div", class_="vacancy-serp-item-body__main-info")
companies = soup.find_all("div", class_="bloko-text")
for i in vacancies:
title = i.find("a").text.encode().decode("utf-8")
link = i.find("a").get("href").encode().decode("utf-8")
for j in companies:
if j.find("a") is not None:
company = j.find("a").text.encode().decode("utf-8").replace('\xa0', ' ')
vacancy_array.append([title, company, link])
print([title, company, link])
def main():
parse()
if __name__ == '__main__':
main()
Нужно чтобы с каждой вакансии в массив сохранялись данные в таком фомате [[название вакансии, название компании, ссылка на вакансию], [название вакансии, название компании, ссылка на вакансию] и т.д]
У меня не получается это сделать. Как это сделать?
Ответы (1 шт):
Автор решения: Universall
→ Ссылка
Ваш парсер я немного подредактировал и теперь он выглядит, как мне кажется, более понятно:
def parse():
result = []
companies = []
titles = []
links = []
with open('tests/test.html', "r", encoding="utf-8") as file:
src = file.read()
soup = BeautifulSoup(src, "html.parser")
vacancies = soup.findAll("div", class_="vacancy-serp-item")
for vacancy in vacancies:
info = vacancy.find("a", attrs={"data-qa": "vacancy-serp__vacancy-title"})
titles.append(info.text)
links.append(info.get("href"))
companies.append(vacancy.find("a", attrs={"data-qa": "vacancy-serp__vacancy-employer"}).text)
for title, company, link in zip(titles, companies, links):
result.append([title, company, link])
with open("output.json", "w+", encoding="utf-8") as output:
json.dump(result, output, indent=4)
Так же можно к вашему коду в конец прибавить:
with open("output.json", "w+", encoding="utf-8") as output:
json.dump(vacancy_array, output, indent=4)
И он будет работать