【问题标题】:Scraping multiple websites and putting a table from each into its own CSV file抓取多个网站并将每个网站的表格放入其自己的 CSV 文件中
【发布时间】:2018-01-02 03:43:15
【问题描述】:

我有一个包含我需要抓取的链接的文本文件。每个网站都有一个表格,我需要获取并保存在自己的 CSV 文件中,我有以下代码:

from bs4 import BeautifulSoup
import pandas as pd
import csv
import urllib2

def stir_the_soup():
    player_links = open('player_links.txt', 'r')
    player_ID_nums = open('player_ID_nums.txt', 'r')
    id_nums = [x.rstrip('\n') for x in player_ID_nums]
    idx = 0
    for url in player_links:
        player_link = urllib2.urlopen(url)
        bs = BeautifulSoup(player_link, 'lxml')
        table_id = ""
        if url[-12] == 'b':
            table_id = "batting"
        elif url[-12] == 'p':
            table_id = "pitching"
    table = str(bs.find('table', {'id' : (table_id + '_gamelogs')}))
    df = pd.read_html(table)
    df2 = df[idx]
    df2.to_csv(path_or_buf=("%s.csv", id_nums[idx]), sep=',')
    idx += 1

if __name__ == "__main__":
    stir_the_soup()

id_nums 列表是我想要的每个 CSV 文件的名称列表。

但是我收到了这个错误:

AttributeError: 'tuple' object has no attribute 'close'

不知道出了什么问题,我知道 read_html() 保存了一组数据帧,所以我试图获取每个数据帧并将其保存到自己的 CSV 中。我四处寻找,找不到一个好的答案。任何帮助表示赞赏

【问题讨论】:

    标签: python csv web-scraping


    【解决方案1】:

    据我所知,您正在将一个元组传递给 path_or_buf 属性。这会引发 AttributeError。将 ',' 更改为 '%' 可以解决您的问题:

    df2.to_csv(path_or_buf=("%s.csv" % id_nums[idx]), sep=',')
    

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2013-11-14
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      相关资源
      最近更新 更多