Python BeautifulSoup和Pandas从URL列表中提取表,并将所有表保存到单个数据帧或另存为csv

2024-04-25 20:32:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从URL列表中提取表格数据,并希望将所有表格保存到单个csv文件中

我是一名新的python初学者,来自非CS背景,但是我非常渴望学习同样的东西

import pandas as pd
import urllib.request
import bs4 as bs

urls = ['A', 'B','C','D',...'Z']

for url in urls:
    source = urllib.request.urlopen(url).read()
    soup = bs.BeautifulSoup(source,'lxml')
    table = soup.find('table', class_='tbldata14 bdrtpg')
    table_rows = table.find_all('tr')

data = []
for tr in table_rows:
    td = tr.find_all('td')
    row = [tr.text for tr in td]
    data.append(row)

final_table = pd.DataFrame(data, columns=["ABC", "XYZ",...])
final_table.to_csv (r'F:\Projects\McData.csv', index = False, header=True)

在新创建的csv文件中,我从上述代码中得到的是-

ABC XYZ PQR MNL CYP ZXS
1   2   3   4   5   6

我上面的代码只从最后一个url-'Z'中获取表,正如我所检查的,它实际上是列表中最后一个url中的表

我在这里试图实现的是将URL列表中的所有表(即A到Z)放入单个csv文件中


Tags: 文件csvinimporturl列表fordata
1条回答
网友
1楼 · 发布于 2024-04-25 20:32:47

这是一个缩进和顺序的问题table_rows每次通过for url in urls循环都会被重置,因此您只会得到最后的URL值的数据。如果你想在一个最终的CSV中保存所有的URL数据,请参阅下面我所做的更改

import pandas as pd
import urllib.request
import bs4 as bs

urls = ['A', 'B','C','D',...'Z']
data = [] # Moved to the start
for url in urls:
    source = urllib.request.urlopen(url).read()
    soup = bs.BeautifulSoup(source,'lxml')
    table = soup.find('table', class_='tbldata14 bdrtpg')
    table_rows = table.find_all('tr')

    #indented the following loop so it runs with every URL data
    for tr in table_rows:
        td = tr.find_all('td')
        row = [tr.text for tr in td]
        data.append(row)

final_table = pd.DataFrame(data, columns=["ABC", "XYZ",...])
final_table.to_csv (r'F:\Projects\McData.csv', index = False, header=True)

相关问题 更多 >