我正在尝试抓取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)
能否请您看看我的代码,以告知我做错了什么?
答案 0 :(得分:2)
如果要在文件上追加数据帧,一种解决方法是以追加模式进行写入:
df.to_csv('path_to_file\\test1.csv', mode='a', header=False)
否则,您应该按照注释中所述在外部创建数据框。
答案 1 :(得分:0)
如果您从循环中定义数据结构,则循环的每次迭代 将重新定义数据结构,这意味着工作正在被重写。
如果您不希望覆盖数据帧,则应在循环之外定义它。