我一直试图从url http://podaac.jpl.nasa.gov/ws/search/granule/index.html解析一个表,但是这个表太大了,以至于在加载网站后需要几毫秒的时间来加载表。因为beautiful soup是网站返回的第一个实例,所以它不能加载完整的表,只能加载表的标题。在
from bs4 import BeautifulSoup as bs
import requests
datasetIds = []
html = requests.get('http://podaac.jpl.nasa.gov/ws/search/granule/index.html')
soup = bs(html.text, 'html.parser')
table = soup.find("table", {"id": "tblDataset"})
print table
rows = table.find_all('tr')
rows.remove(rows[0])
for row in rows:
x = row.find_all('td')
datasetIds.append(x[1].text.encode('utf-8'))
print datasetIds
代码必须返回第一个表中的datasetid,但它只返回表的标题。提前感谢您的帮助!:)
正如@Hassan Mehmood所提到的,您必须使用selenium(或任何其他headles浏览器)来实现这一点,因为表是用javascript生成的。beauthoulsoup不计算javascript,也不能用于获取所需的数据。在
你可以以此为起点:
通过ajax请求检索数据,您可以从返回格式良好的json的文件中执行get:
我们只需要用几个键拉:
^{pr2}$输出片段:
这将为您提供表中所有的数据集ID和Short Name对,而不需要bs4。在
要获得ID,只需使用键
Dataset-PersistentId
访问每个dict:一些输出:
第二个ajax请求返回更多数据:
您还可以更改一些参数以提供不同的输出。在
相关问题 更多 >
编程相关推荐