当前位置: 首页 > 知识库问答 >
问题:

Python-Web抓取HTML表并打印到CSV

谢涵亮
2023-03-14
<div class="col-xs-12 tab-content">
        <div id="historical-data" class="tab-pane active">
          <div class="tab-header">
            <h2 class="pull-left bottom-margin-2x">Historical data for Bitcoin</h2>

            <div class="clear"></div>

            <div class="row">
              <div class="col-md-12">
                <div class="pull-left">
                  <small>Currency in USD</small>
                </div>
                <div id="reportrange" class="pull-right">
                    <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>&nbsp;
                    <span>Aug 16, 2017 - Sep 15, 2017</span> <b class="caret"></b>
                </div>
              </div>
            </div>

            <table class="table">
              <thead>
              <tr>
                <th class="text-left">Date</th>
                <th class="text-right">Open</th>
                <th class="text-right">High</th>
                <th class="text-right">Low</th>
                <th class="text-right">Close</th>
                <th class="text-right">Volume</th>
                <th class="text-right">Market Cap</th>
              </tr>
              </thead>
              <tbody>

                <tr class="text-right">
                  <td class="text-left">Sep 14, 2017</td>
                  <td>3875.37</td>     
                  <td>3920.60</td>
                  <td>3153.86</td>
                  <td>3154.95</td>
                  <td>2,716,310,000</td>
                  <td>64,191,600,000</td>
                </tr>

                <tr class="text-right">
                  <td class="text-left">Sep 13, 2017</td>
                  <td>4131.98</td>     
                  <td>4131.98</td>
                  <td>3789.92</td>
                  <td>3882.59</td>
                  <td>2,219,410,000</td>
                  <td>68,432,200,000</td>
                </tr>

                <tr class="text-right">
                  <td class="text-left">Sep 12, 2017</td>
                  <td>4168.88</td>     
                  <td>4344.65</td>
                  <td>4085.22</td>
                  <td>4130.81</td>
                  <td>1,864,530,000</td>
                  <td>69,033,400,000</td>
                </tr>                
              </tbody>
            </table>
          </div>

        </div>
    </div>
from bs4 import BeautifulSoup
import requests
import pandas as pd
import csv

url = "enterURLhere"
page = requests.get(url)
pagetext = page.text

pricetable = {
    "Date" : [],
    "Open" : [],
    "High" : [],
    "Low" : [],
    "Close" : [],
    "Volume" : [],
    "Market Cap" : []
}

soup = BeautifulSoup(pagetext, 'html.parser')

file = open("test.csv", 'w')

for row in soup.find_all('tr'):
    for col in row.find_all('td'):
        print(col.text)

任何人都有任何关于如何至少重新格式化数据拉到表的指示吗?多谢了。

共有1个答案

诸葛奇玮
2023-03-14

运行代码,您将从该表中获得所需的数据。要从这个元素中提取数据,您需要做的就是将上面粘贴的整个html元素包装在html=“”“”“

import csv
from bs4 import BeautifulSoup

outfile = open("table_data.csv","w",newline='')
writer = csv.writer(outfile)

tree = BeautifulSoup(html,"lxml")
table_tag = tree.select("table")[0]
tab_data = [[item.text for item in row_data.select("th,td")]
                for row_data in table_tag.select("tr")]

for data in tab_data:
    writer.writerow(data)
    print(' '.join(data))

我试着把代码拆成碎片让你明白。上面所做的是一个嵌套的for循环。下面是它各自的情况:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,"lxml")
table = soup.find('table')

list_of_rows = []
for row in table.findAll('tr'):
    list_of_cells = []
    for cell in row.findAll(["th","td"]):
        text = cell.text
        list_of_cells.append(text)
    list_of_rows.append(list_of_cells)

for item in list_of_rows:
    print(' '.join(item))

结果:

Date Open High Low Close Volume Market Cap
Sep 14, 2017 3875.37 3920.60 3153.86 3154.95 2,716,310,000 64,191,600,000
Sep 13, 2017 4131.98 3789.92 3882.59 2,219,410,000 68,432,200,000
Sep 12, 2017 4168.88 4344.65 4085.22 4130.81 1,864,530,000 69,033,400,000
 类似资料:
  • 网页爬取 编写网页需要使用 HTML 语言,如果你有 HTML 学习经历就能知道所谓 HTML 语言就是一种规格化文档。有时我们能很方便的从中获取一些需要的数据,并且保持数据原有格式,如 csv 、json 等格式。但有时网站并不会提供一目了然的数据格式。 所以我们就需要爬取网页。网页爬取就是通过电脑程序编写,从不同的网页中去删选、挖掘你需要的数据,并且保存数据相应的格式。 网页请求( Reque

  • 我只是卡住了。如何在Django上打印html数据库?我有“jegy.html”,我想打印爵士桌,但我说,我卡住了。 views.py: 模型。来自django的py。数据库导入模型

  • 本文向大家介绍Python打印scrapy蜘蛛抓取树结构的方法,包括了Python打印scrapy蜘蛛抓取树结构的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python打印scrapy蜘蛛抓取树结构的方法。分享给大家供大家参考。具体如下: 通过下面这段代码可以一目了然的知道scrapy的抓取页面结构,调用也非常简单 希望本文所述对大家的Python程序设计有所帮助。

  • 如果图像无法加载,下面是代码

  • 正如标题所示,我正在尝试使用Selenium从网站(示例)中获取一些数据,但是我在从Pro结果表中获取隐藏在每一行中的数据时遇到了问题,即单击Show Details按钮()时显示的数据。 这是我的代码: 正如您所看到的,我可以很容易地获取表中的行,但是当我试图获取隐藏数据时,我就是找不到获取它的方法。 我对Selenium也不是很熟悉,所以欢迎提供任何指导。

  • 问题内容: Java中有一种简单的方法可以执行以下操作吗? 连接到打印机(将是本地打印机,并且是连接到机器的唯一打印机)。 在2个不同的打印机纸盘中打印2页的页面。 获取当前的打印队列计数,即我有100项要打印的项目和34项当前已打印,则打印机队列现在应显示为66。 问题答案: 一些快速提示: 从Java打印:请参阅基本打印程序 打印作业的状态:您可以使用PrintJobListener获得一些有