【问题标题】:Python BeautifulSoup and Pandas extract table from list of urls and save all the tables into single dataframe or save as csvPython BeautifulSoup 和 Pandas 从 url 列表中提取表格并将所有表格保存到单个数据框或保存为 csv
【发布时间】:2020-07-05 16:43:48
【问题描述】:

我正在尝试从 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

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

我在这里想要实现的是从 url 列表中获取所有表 - 即 A 到 Z 到单个 csv 文件中。

【问题讨论】:

  • 那是因为您的 table_rows 在每次迭代的第一个 for 中都会被覆盖 - 所以它将只有 lasturl 的行

标签: python pandas dataframe csv beautifulsoup


【解决方案1】:

这是缩进和顺序的问题。 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)

【讨论】:

  • 感谢代码现在工作正常,我得到了完整的 csv
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多