我正试图为这个网页抓取航班数https://www.flightradar24.com/56.16,-49.51
数字每8秒更新一次。
这就是我试过的美组:
import requests
from bs4 import BeautifulSoup
import time
r=requests.get("https://www.flightradar24.com/56.16,-49.51")
c=r.content
soup=BeautifulSoup(c,"html.parser")
value=soup.find_all("span",{"class":"choiceValue"})
print(value)
但它总是返回0:
[<span class="choiceValue" id="menuPlanesValue">0</span>]
View source也显示0,所以我理解为什么BeautifulSoup也返回0。
有没有人知道其他方法来得到当前值?
因此,根据@Andre发现的情况,我编写了以下代码:
代码应该是自我解释的,它所做的一切就是每8秒打印一次实际的航班计数:)
注意:这些值与网站上的值相似,但不相同。这是因为Python脚本和网站不太可能同时发送请求。如果你想得到更准确的结果,例如每4秒就要发出一个请求。
你想用什么就用什么,扩展什么。希望这有帮助!
这种方法的问题在于,页面首先加载视图,然后执行常规请求以刷新页面。如果您在Chrome中查看开发人员控制台中的network选项卡(例如),您将看到对https://data-live.flightradar24.com/zones/fcgi/feed.js?bounds=59.09,52.64,-58.77,-47.71&faa=1&mlat=1&flarm=1&adsb=1&gnd=1&air=1&vehicles=1&estimated=1&maxage=7200&gliders=1&stats=1的请求
响应是常规json:
我不确定这个API是否以任何方式受到保护,但似乎我可以使用curl访问它而不会有任何问题。
更多信息:
您可以使用selenium对包含由javascript添加的动态内容的网页进行爬网。
相关问题 更多 >
编程相关推荐