python-3.x - BeautifulSoup 发现所有表都是空的
问题描述
我正在尝试从 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 中(据我所知)。这只是文字。
我对数据抓取非常陌生,真的不知道为什么这个简单的例子不起作用。非常感谢任何帮助。谢谢你。
解决方案
你找不到table
标签,因为没有,你必须找到pre
标签。
你可以试试这个片段,它会得到表格内的文本:
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
推荐阅读
- javascript - 将 props 传递给 URL
- javascript - Jquery:如何使用数组名称获取输入元素的所有值?
- visual-studio - 使用代码签名证书对 ClickOnce 应用程序进行签名,但发布者仍然未知
- javascript - NPM 没有正确更新包
- r - 从 RAM 中删除加载的 drake 缓存对象
- python - truncatechars 工作时模板标签切片不起作用
- reactjs - React-Redux 调度设计
- python - Python比较两个列表的值
- java - 从多部分/替代消息中以字符串形式获取附件
- java - 如何杀死 MQ 消费者或生产者中的特定 IP 地址,该地址被随机人员用于 java 中的本地设置