【问题标题】:Entire Website Nested in One HTML Tag Disrupts Python Web Scraper整个网站嵌套在一个 HTML 标记中破坏 Python Web Scraper
【发布时间】:2022-11-10 08:40:27
【问题描述】:

我正在尝试创建一个 Python WebScraper,它从 Internet 获取数据并将其转换为一个表,然后我将其导出为 .csv 文件。我试图让这个程序工作的示例网站是:https://asdc.larc.nasa.gov/data/AJAX/O3_1/2018/06/06/AJAX-O3_ALPHA_20180606_R1_F229.ict

我计划使用BeautifulSoup 库来执行此操作,但是当我意识到感兴趣的网页的整个文本都嵌套在一个标签中时,我碰壁了,如下图所示。有谁知道我可以从这个 HTML 文本块中提取特定单词和值的任何方法?例如,我想创建 7 列。当我使用findAll 函数在文本中查找这些列标题时,在打印结果时会返回整个文本块,因为所有文本都位于<p></p> 标记之间。

我的一个假设是在代码行之间添加 HTML 标记,然后使用 Python 访问,但我不知道这是否可以实现。

使用BeautifulSoup 提取数据后,我计划将此数据传递给pandas 数据框,以便轻松导出到.csv。

【问题讨论】:

  • 它基本上只是纯文本,没有结构或格式。您执行此操作的方式与处理普通文本文件的方式相同。
  • 它不适用于计算机解析,仅供人类阅读。因此,请加强您的自然语言解析技能。
  • 所以我收集到的是,对于新手程序员来说,这不是一个很棒的第一个项目吗?
  • 如果你仍然倾向于,那么是的,这不是一个伟大的第一个项目。首先,尝试一些更有条理的东西。这是可行的,但这里没有真正的结构,并且需要大量的婴儿。
  • 正则表达式在这里可能有用

标签: python html web-scraping insert tags


【解决方案1】:

虽然这不是初学者的最佳项目,但我想我会在页面末尾突出显示检索表格所需的步骤。这并不太难,并且避免了对正则表达式等的需要。

以下是步骤:



将您的令牌粘贴到以下代码中:

# Navigate to : https://urs.earthdata.nasa.gov/profile
# Select the "Generate Token" menu item
# Click on the "Generate Token" button
# Copy and paste your token into the script below

# Instructions for downloading data from asdc.larc.nasa.gov : 
# https://forum.earthdata.nasa.gov/viewtopic.php?t=2330#confirm_external_link-modal

import requests
import pandas as pd
from io import StringIO 

# Identify the datafile and your token below
url='https://asdc.larc.nasa.gov/data/AJAX/O3_1/2018/06/06/AJAX-O3_ALPHA_20180606_R1_F229.ict'
token='******paste-token-here******'
header={"Authorization": f"Bearer {token}"}

# Download the datafile
response = requests.get(url, headers=header)
content = (response.content).decode("utf-8").split('
')

# Identify the table header line in the content list
important_index = content.index('Int_Start, Int_End, TIME, G_Lat, G_Lon, G_Alt, O3')

# Keep the table data only
data = content[important_index:]

# convert the table data into a dataframe
df = pd.read_csv(StringIO('
'.join(data)))

# Display the dataframe
print(df)


输出:

     Int_Start   Int_End     TIME   G_Lat   G_Lon   G_Alt      O3
0      69860.0   69868.0  69864.0 -9999.0 -9999.0 -9999.0  27.500
1      69870.0   69878.0  69874.0 -9999.0 -9999.0 -9999.0  28.545
2      69880.0   69888.0  69884.0 -9999.0 -9999.0 -9999.0  28.564
3      69890.0   69898.0  69894.0 -9999.0 -9999.0 -9999.0  29.818
4      69900.0   69908.0  69904.0 -9999.0 -9999.0 -9999.0  31.509
..         ...       ...      ...     ...     ...     ...     ...
869    78550.0   78558.0  78553.6 -9999.0 -9999.0 -9999.0  39.584
870    78559.0   78567.0  78563.4 -9999.0 -9999.0 -9999.0  35.100
871    78570.0   78578.0  78573.6 -9999.0 -9999.0 -9999.0  34.150
872    78579.0   78587.0  78583.4 -9999.0 -9999.0 -9999.0  33.789
873    78590.0   78598.0  78593.6 -9999.0 -9999.0 -9999.0  32.193

[874 rows x 7 columns]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 2021-12-09
    • 2019-10-24
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多