Задать вопрос
@aspitsin138

Как до записывать в файл csv данные при парсинге?

Как до записывать в файл csv данные при парсинге новой страницы?
Сейчас при парсинге каждой новой ссылки создается новый файл и данные записываются в него. Мне же нужно записать данные с этих страниц в один файл.
import requests
from bs4 import BeautifulSoup
import json
import csv
import random
import time

with open("all_categories_dict.json") as file:
    all_categories = json.load(file)

iteration_count = int(len(all_categories)) - 1
count = 0
print(f"Всего итерация: {iteration_count}")

for category_name, category_href in all_categories.items():


    rep = ["\n"]
    for item in rep:
        if item in category_name:
            category_name = category_name.replace(item, " ")

    req = requests.get(url=category_href, headers=headers)
    src = req.text

    
    with open(f"data/{count}_{category_name}.html", "w") as file:
        file.write(src)

    with open(f"data/{count}_{category_name}.html") as file:
        src = file.read()

    soup = BeautifulSoup(src, "lxml")
     products_data = soup.find(class_="table-responsive").find_all("tr")
    table_price = soup.find(class_="text-right")
    

    product_info = []
    for item in products_data:
        product_tds = item.find_all("td")
        article = product_tds[0].text
        name = product_tds[1].text
        price = product_tds[2].text

        product_info.append({
            "Артикл": article,
            "Имя": name,
            "Прайс": price
        })

        with open(f"data/{count}_{category_name}.csv", "a", encoding="utf-8-sig") as file:
            writer = csv.writer(file, delimiter=';')
            writer.writerow((
                article,
                name,
                price

            ))
       count +=1
    print(f"# Итерация {count}. {category_name} записан") 
    iteration_count = iteration_count - 1
    if iteration_count == 0:
        print("Работа завершена")
        break
    print(f'Осталось итераций: {iteration_count}')
    
    time.sleep(random.randrange(2, 4))
  • Вопрос задан
  • 80 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы