【问题标题】:BeautifulSoup find all table emptyBeautifulSoup 发现所有表都是空的
【发布时间】:2019-08-19 06:14:39
【问题描述】:

我正在尝试从 NOAA 网站上抓取一个非常简单的表格:https://www1.ncdc.noaa.gov/pub/data/cdo/samples/PRECIP_HLY_sample_ascii.dat

该表格是一个“.dat”文件,并且该站点似乎是 html 格式。当我使用 BeautifulSoup 阅读内容时,我可以很好地看到内容。但是,当我使用“find_all”或“find”搜索表时,我什么也得不到,即 []。

这是我的初始代码:

page = requests.get('https://www1.ncdc.noaa.gov/pub/data/cdo/samples/PRECIP_HLY_sample_ascii.dat')
soup = BeautifulSoup(page.content,'html.parser') #'html5lib' #'html.parser' 'lxml'
table = soup.find_all('table')     

当我输入汤时,我得到以下信息:

但是,当我尝试将信息放入表格时,它会出现空白

table
>> []

我尝试了以下变体:

page = urllib.request.urlopen('https://www1.ncdc.noaa.gov/pub/data/cdo/samples/PRECIP_HLY_sample_ascii.dat').read()

soup = BeautifulSoup(page,'lxml')
soup = BeautifulSoup(page,'html5lib') #'' #''

table = soup.findAll('table') 
table = soup.findAll("div",{"class":"line-gutter-backdrop"}) 
table = soup.find_all(True)

但是,表格仍然是空白的。

我发现这个问题似乎很相似:Cannot find table using Python BeautifulSoup

但我的表不在 javascript 中(据我所知)。这只是文字。

我对数据抓取非常陌生,真的不知道为什么这个简单的示例不起作用。非常感谢任何帮助。谢谢你。

【问题讨论】:

  • 昨天这个问题还有一个答案,但现在没有了。请问可以转发吗?谢谢。

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


【解决方案1】:

你找不到table标签,因为没有,你必须找到pre标签。

你可以试试这个sn-p,它会得到表格里面的文字:

from bs4 import BeautifulSoup as soup
import urllib

url = 'https://www1.ncdc.noaa.gov/pub/data/cdo/samples/PRECIP_HLY_sample_ascii.dat'

response = urllib.request.urlopen(url)
html = response.read()

page_soup = soup(html,'lxml')
table = page_soup.find('p')
print(table.text)

输出:

STATION           STATION_NAME                                       ELEVATION  LATITUDE   LONGITUDE  DATE           HPCP     Measurement Flag Quality Flag 
----------------- -------------------------------------------------- ---------- ---------- ---------- -------------- -------- ---------------- ------------ 
COOP:310301       ASHEVILLE NC US                                    682.1      35.5954    -82.5568   20100101 00:00    99999                ]              
COOP:310301       ASHEVILLE NC US                                    682.1      35.5954    -82.5568   20100101 01:00        0                g              
COOP:310301       ASHEVILLE NC US                                    682.1      35.5954    -82.5568   20100102 06:00        1     

【讨论】:

  • 谢谢。有没有办法使用这种方法将它放入熊猫数据框中?
  • 我认为 panda 是用来从 table 标签中获取数据的,所以我认为这里不可能。但我不是熊猫专家:-)
猜你喜欢
  • 1970-01-01
  • 2018-07-09
  • 2023-04-09
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多