使用python从web页面获取“隐藏”数据

2024-06-16 09:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我用法国水文局的潮汐数据编写了一个Python程序。现在,我用Mozilla Firefox在Windows-10下打开了这个站点: http://maree.shom.fr/harbor/BREST/wl/0?date=2016-10-31&utc=standard (选择“Hauteur d'eau heure par heure”,并设置港口和日期)。然后,我右键单击,从弹出菜单中选择“另存为”,并选择文本文件选项,然后获取相关表所在的文件,例如:

Lundi 31 octobre 2016
00:00   01:00   02:00   03:00   04:00   05:00
1.79m   2.76m   4.09m   5.43m   6.45m   6.87m
06:00   07:00   08:00   09:00   10:00   11:00
6.56m   5.64m   4.42m   3.21m   2.22m   1.61m...

我的Python应用程序使用regex从这个文件中提取数据。 我想自动化这个过程(从Python应用程序打开页面并获取相关内容),但是我还没有找到如何做到这一点。网页的html源代码(在Firefox中右键单击阅读)不包含潮汐表。我尝试过使用selenium,但得到的只是同样无用的html代码。有没有什么方法,比如说,模拟Firefox在执行“另存为*.text”命令时的行为?在


Tags: 文件数据程序应用程序httpmozilla站点windows
1条回答
网友
1楼 · 发布于 2024-06-16 09:16:37

这并没有模仿firefox的功能,但如果你愿意,它会提供字典中的数据。
其思想是在html中找到<tbody>标记,然后分割行。那么时间是<th>标记,高度是<td>标记。
所以两个环和拉链就可以了。
在这个例子中,html在一个文件中。你也可以把它放在变量中。在

f = open("html.txt","r").read()

table = f[f.find("<tbody>"):f.find("</tbody>")]

rows = table.split("<tr>")

data = []

for i in range(1,len(rows),2):
    data.extend(zip(rows[i].split("<th>")[1:],rows[i+1].split("<td>")[1:]))

for i in range(0,len(data)):
    x = data[i][0]
    y = data[i][1]
    data[i] = x[:x.find("<")],y[:y.find("<")]

print dict(data)

更新:

在html中看不到表的原因是它生成了javascript。所以我们需要一些像硒一样的东西,正如你们所尝试的。
我不知道该网站的所有者是否喜欢您将其删除,因此您可以询问他们,或查看是否有API。
也就是说,这就是你如何抓取javascript生成的内容。
我为webdriver安装了PhantomJS。在

^{pr2}$

相关问题 更多 >