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



我正在尝试从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:ProjectsMcData.csv', index = False, header=True)

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

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

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

我在这里要实现的是将 url 列表中的所有表(即 A 到 Z (放入单个 csv 文件中。

这是缩进和顺序的问题。 每次通过for url in urls循环table_rows都会重置,因此您最终只会得到最后一个 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:ProjectsMcData.csv', index = False, header=True)

最新更新