Найти - Пользователи
Полная версия: Как записать правильно результат в файл csv
Начало » Python для новичков » Как записать правильно результат в файл csv
1
Brannigan1
Всем добрый день.

Я новичок в python. Изучаю всего пару дней.
Нужно решить такую задачу по парсингу сайта. URL: https://www.remmers.ru/ru?

На сайте есть много страниц, url которых имеет вид "https://www.remmers.ru/ru/c/c{4- или 5-значный числовой номер}. Нужно перебрать все урлы, имеющие “хвост” в диапазоне от 7200 до 7220 и полученный результат записать в csv.

Я написал вот это:


import requests
import csv

categories = range(7200, 7220, 1)

def check_url(url_name):
for i in categories:
url = f'https://www.remmers.ru/ru/c/c{i}'
response = requests.get(url)
if response.ok:
with open(“category.csv”, “w”, encoding='utf-8') as file:
file.write(response.url)
file.close()

check_url('https://www.remmers.ru/ru/c/c')

В файл записывается только url c последним значением из range.
При этом если вместо записи в файл просто вывести результат в консоли через print(response.url), все урлы выводятся по порядку как надо. Что я делаю не так? Заранее всем спасибо за ответы и рекомендации.
xam1816
открываешь файл для записи
для каждого i в диапазоне(7200, 7220)
ответ = запрос(url{i})
если код ответа == 200:
файл.записать(то что нужно записать)

py.user.next
Brannigan1
  
categories = range(7200, 7220, 1)
  
categories = range(7200, 7220 + 1)

Brannigan1
В файл записывается только url c последним значением из range.
Так ты прочитай сначала, как пользоваться модулем csv.
https://docs.python.org/3/library/csv.html#examples

То, что ты пишешь, - это же ахинея какая-то, не имеющая отношения к csv.

Brannigan1
В файл записывается только url c последним значением из range.
Brannigan1
Что я делаю не так?
Да у тебя просто на каждом шаге цикла файл по новой открывается, в нём всё стирается, естественно, и потом в пустой файл записывается одна текущая запись.
Brannigan1
py.user.next, спасибо! После твоего сообщения я переосмыслил все, что я делаю, подучил матчасть и написал следующий код:

import csv
import requests

with open('example.csv', ‘w’, newline='') as f: #создает файл csv
writer = csv.writer(f)
writer.writerow('URL') # прописывает первую строку
f.close()

for i in range(7000, 7021):
with open('example.csv', ‘a’, newline='', encoding='utf-8') as f: # открывает только что созданный файл и построчно дописывает значения, полученные из цикла
url = f'https://www.remmers.ru/ru/c/c{i}'
req = requests.get(url)
writer = csv.writer(f)
if req.ok is True:
writer.writerow(req.url)
else:
writer.writerow('CATEGORY c' + str(i) + ‘ - STATUS 404 - PAGE NOT FOUND’)
f.close()

Проблема решена. Все работает как надо. Тем не менее буду благодарен за критику и советы по оптимизации.
xam1816
[code python]между этими тегами вставлять код, для правильного отображения,список тегов в редакторе сообщений рядом со смайлом[/code]
я тебе писал алгоритм, который нужно было перевести на python
 import requests
with open('my_file.txt', 'w') as file:# открываю файл для записи
    print('идет процесс', end='')
    for i in range(7200, 7221): # для каждого i в диапазоне
        print('.', end='')
        resp = requests.get(f'https://www.remmers.ru/ru/c/c{i}') # ответ = запрос(url{i})
        if resp.status_code == 200: # если код ответа 200
            file.write(resp.url + '\n') # записываю в файл url
        else:# иначе
            file.write(f'category c{i} - {resp.status_code}') # записываю код и i
# с with файл закрывается автоматически
print('\nфайл записан')
py.user.next
Brannigan1
Тем не менее буду благодарен за критику и советы по оптимизации.
Там у тебя файл открывается много раз, а нужно один раз его открыть. И если ты with используешь, то файл закрывается сам по себе в конце.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB