【问题标题】:Writing data scraped from a HTML table to a CSV file将从 HTML 表中抓取的数据写入 CSV 文件
【发布时间】:2020-02-22 07:51:48
【问题描述】:

我正试图弄清楚将我的网页抓取转换为 CSV 的下一步是什么。

我尝试将每一列放入单独的列表中,但我觉得这不是解决方案。

from bs4 import BeautifulSoup
import requests

url = 'https://www.pro-football-reference.com/years/2018/passing.htm'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

for row in tb.find_all('tr'):
    i = row.get_text()
    print(i)

【问题讨论】:

  • 下一步:import csv
  • 最好将每一行放在单独的列表中,然后使用模块csvwriterow(list)writerows(list_of_lists)
  • 对我来说,预期的结果应该是什么样子并不明显。你能提供你想要的最终 CSV 的 sn-p(并解释你是如何得到它的)吗?谢谢。
  • @ggorlen 预期的结果是 csv 看起来像表格。
  • 很公平,谢谢。你想要每 30 行的标题,还是只在顶部? tb 未在您的代码中定义,顺便说一句。

标签: python python-3.x csv web-scraping beautifulsoup


【解决方案1】:

这应该可以工作

import csv      #quite crucial

final_table = []
for row in tb.findall('tr'):
    next_line = row.get_text()
    final_table.append([next_line])

with open('output.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(final_table)

【讨论】:

    【解决方案2】:

    使用csv 模块。我们将使用soup.find("tr").find_all("th") 获取标题,然后遍历正文并将其写入文本文件。每行的第一个单元格是<th>,因此我们需要单独处理它并将其添加到<td> 数据中。请注意,省略了每 30 行交错的标题。

    import csv
    import requests
    from bs4 import BeautifulSoup
    
    url = "https://www.pro-football-reference.com/years/2018/passing.htm"
    soup = BeautifulSoup(requests.get(url).content, "html.parser")
    
    with open("output.csv", "w") as f:
        writer = csv.writer(f)
        writer.writerow([x.get_text() for x in soup.find("tr").find_all("th")])
    
        for row in soup.find_all("tr"):
            data = [row.find("th").get_text()] + [x.get_text() for x in row.find_all("td")]
    
            if data: 
                writer.writerow(data)
    

    Run the code

    输出(仅前几行):

    Rk,Player,Tm,Age,Pos,G,GS,QBrec,Cmp,Att,Cmp%,Yds,TD,TD%,Int,Int%,Lng,Y/A,AY/A,Y/C,Y/G,Rate,QBR,Sk,Yds,NY/A,ANY/A,Sk%,4QC,GWD
    1,Ben Roethlisberger,PIT,36,QB,16,16,9-6-1,452,675,67.0,5129,34,5.0,16,2.4,97,7.6,7.5,11.3,320.6,96.5,71.0,24,166,7.10,7.04,3.4,2,3
    2,Andrew Luck*,IND,29,QB,16,16,10-6-0,430,639,67.3,4593,39,6.1,15,2.3,68,7.2,7.4,10.7,287.1,98.7,69.4,18,134,6.79,6.95,2.7,3,3
    3,Matt Ryan,ATL,33,QB,16,16,7-9-0,422,608,69.4,4924,35,5.8,7,1.2,75,8.1,8.7,11.7,307.8,108.1,68.5,42,296,7.12,7.71,6.5,1,1
    4,Kirk Cousins,MIN,30,QB,16,16,8-7-1,425,606,70.1,4298,30,5.0,10,1.7,75,7.1,7.3,10.1,268.6,99.7,58.2,40,262,6.25,6.48,6.2,1,0
    

    Check this thread 如果您在 Windows 上的 CSV 结果中看到额外的换行符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2011-12-30
      • 1970-01-01
      • 2017-05-21
      相关资源
      最近更新 更多