Как сделать правильно сохранение списка в 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)

И он будет работать

→ Ссылка