Почему мой для перезаписи цикла вместо добавления CSV? - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь очистить сайт IB.Итак, что я делаю, я создал URL для перебора, и я могу извлечь необходимую информацию, но кажется, что фрейм данных перезаписывается и добавляется.

import pandas as pd
from pandas import DataFrame as df
from bs4 import BeautifulSoup
import csv
import requests

base_url = "https://www.interactivebrokers.com/en/index.phpf=2222&exch=mexi&showcategories=STK&p=&cc=&limit=100"
n = 1

url_list = []

while n <= 2:
    url = (base_url + "&page=%d" % n)
    url_list.append(url)
    n = n+1

def parse_websites(url_list):
    for url in url_list:
        html_string = requests.get(url)
        soup = BeautifulSoup(html_string.text, 'lxml') # Parse the HTML as a string
        table = soup.find('div',{'class':'table-responsive no-margin'}) #Grab the first table
        df = pd.DataFrame(columns=range(0,4), index = [0]) # I know the size 

        for row_marker, row in enumerate(table.find_all('tr')):
            column_marker = 0
            columns = row.find_all('td')
            try:
                df.loc[row_marker] = [column.get_text() for column in columns]
            except ValueError:
            # It's a safe way when [column.get_text() for column in columns] is empty list.
                continue

        print(df)
        df.to_csv('path_to_file\\test1.csv')

parse_websites(url_list)

Не могли бы вы взятьпосмотрите мой код на посоветуйте что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Если вы определяете структуру данных из цикла, каждая итерация цикла переопределяет структуру данных, что означает, что работа переписывается.

Кадр данных должен быть определен вне цикла, если вы не хотите, чтобы он был перезаписан.

0 голосов
/ 26 ноября 2018

Одним из решений, если вы хотите добавить фреймы данных в файл, является запись в режиме добавления:

df.to_csv('path_to_file\\test1.csv', mode='a', header=False)

в противном случае вы должны создать фрейм данных снаружи, как указано в комментариях.

...