написание csv с кодом python - мне нужно разбить результаты на несколько файлов

Я разработчик php, но сейчас изучаю python.

Я собираю некоторую информацию, и список результатов огромен: более 150 000 строк.

Однако следующий код работает, но писатель или сценарий, кажется, задыхаются примерно на 10 000 строк.

Я хочу разделить результаты и заставить автора написать несколько CSV-файлов по 10 000 строк, а не пытаться записать все результаты в один файл.

В php id сделайте это, используя переменную счетчика, и прекратите запись текущего файла, начните запись нового файла с новым именем.

Тем не менее, все еще изучая синтаксис для python.

Пожалуйста, может кто-нибудь указать мне по правильным линиям?

Спасибо.

Вот код:

while True:
        # preOffset = driver.execute_script("return document.body.scrollHeight;")
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")            ## Scroll Content
        # if driver.find_element_by_class_name("NoMoreItems"):
        if driver.find_elements_by_xpath("//*[@class='NoMoreItems']"):
            break
        # print(driver.execute_script("return document.body.scrollHeight;"))
    html= driver.page_source                                                                ## Get HTML Source
    soup = BeautifulSoup(html, 'lxml')                                                      ## Parse to BS4

        tag = soup.find('div', {'id': 'members'})                   ## Find desire DIV

    tag = tag.find('div', {'class': 'ListContainer'})                       ## Get List container
    # for achr in tag.finAll('a'):
    #     print(achr.string)
    
    with open('members.csv', 'w', encoding="utf-8", newline='') as csvfile:                 ## Initialize the CSV

        # Column of csv file
        column_name = ['Name', 'URL']                                                ## Define Column Name and URL
        writer = csv.DictWriter(csvfile, fieldnames=column_name)                            
        writer.writeheader()                                                                ## Header Write
    
        for link in tag.findAll('a'):                                                       ## Find each Anchor tag contains Name
            link = link
            if link.string != None:
                writer.writerow({
                    'Name': link.string,
                    'URL': link["href"]
                })

person Hue Man    schedule 04.08.2020    source источник
comment
Муравьиная причина, по которой вы заставляете newline=''?   -  person taras    schedule 04.08.2020
comment
В Python нет внутреннего ограничения на количество строк, которые можно записать в CSV-файл. Я бы посоветовал проверить, действительно ли скрипт находит все ожидаемые данные.   -  person snakecharmerb    schedule 04.08.2020
comment
@snakecharmerb Он находит все данные, я сижу и смотрю на них, и когда они останавливаются, я могу продолжить прокрутку вручную, открывая остальные результаты без какой-либо видимой причины для их остановки.   -  person Hue Man    schedule 04.08.2020
comment
Осторожно, в Python отступы имеют значение. Показанный код имеет непоследовательный отступ и из-за этого его трудно читать...   -  person Serge Ballesta    schedule 04.08.2020
comment
Кстати, я не могу себе представить, почему скрипт решил прекратить запись в файл csv, пока у него все еще есть доступные данные. Вместо этого я подозреваю, что суп содержит более одного div ListContainer. Иными словами, сценарий записал все содержимое tag.find_all('a'), но часть ожидаемых данных была в другом месте.   -  person Serge Ballesta    schedule 04.08.2020
comment
Если вы хотите использовать счетчик, вы можете использовать встроенный enumerate. -в функции: for idx, link in enumerate(tag.findAll('a')):   -  person snakecharmerb    schedule 04.08.2020


Ответы (1)


Спасибо всем. Я нашел виновника. Список, который я пытался очистить, имеет встроенный лимит в 10 КБ. Я должен был знать. Спасибо еще раз.

person Hue Man    schedule 04.08.2020