M-W*_*ane 0 python selenium web-scraping
我正在尝试从此网页抓取数据:海上交通
我确实尝试了 python 和 Selenium 中的正常抓取,但我无法找出任何目标数据。(纬度/经度/速度)
是否有我缺少的特殊格式?
这是我开始的代码
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
options.add_argument('--headless')
driver = webdriver.Chrome("C:/webdrivers/chromedriver.exe", options=options)
page = driver.page_source
Run Code Online (Sandbox Code Playgroud)
但是通过使用 CTRL + FI 进行简单的文本搜索找不到任何令人满意的内容。
知道如何把它刮下来吗?
谢谢
如果您在浏览器中查看该页面并记录浏览器的网络流量,您会注意到向各种 API 端点发出一些 XHR HTTP GET 请求,其响应是 JSON 并包含您正在查找的信息。您所要做的就是模仿这些请求 - 不需要 BeautifulSoup 或 Selenium:
def get_ship_position(ship_id):
import requests
url = "https://www.marinetraffic.com/vesselDetails/latestPosition/shipid:{}".format(ship_id)
headers = {
"accept": "application/json",
"accept-encoding": "gzip, deflate",
"user-agent": "Mozilla/5.0",
"x-requested-with": "XMLHttpRequest"
}
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()
def main():
from datetime import datetime
data = get_ship_position("371441")
ts = datetime.utcfromtimestamp(data["lastPos"])
print("Last known position: {} / {} @ {}".format(data["lat"], data["lon"], ts))
return 0
if __name__ == "__main__":
import sys
sys.exit(main())
Run Code Online (Sandbox Code Playgroud)
输出:
Last known position: -1.53057 / -48.77838 @ 2021-08-04 10:33:33
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2344 次 |
最近记录: |