python - 使用Python网络抓取公交车时刻表

标签 python html web-scraping

我想从以下网站抓取公交车时刻表https://ul.se 。它是瑞典语的,但有英语选项,无论如何它不会影响我的主要问题。通过将我们感兴趣的位置放入搜索字段中,我们可以到达以下链接,这是我感兴趣的位置的示例。 https://www.ul.se/#/700600/0/Uppsala%20Centralstation%20(Uppsala)/700591/0/Stadsbiblioteket%20(Uppsala)//2/

通过右键单击并检查我想要抓取的元素,我可以在开发工具中看到它们,但在整个页面源代码中它没有列出。例如,通过复制我得到的选择器来查看下一类车的第一个可用时间

#travelResults > ul-search-journey-result-card:nth-child(3) > div > div.result-head > div.result-row.time > span.dpt-arr-time。 ng-绑定(bind)

这在我的代码中根本不起作用。即使我忘记了 BeautifulSoup (这就是我正在尝试使用的),并且只是在完整的 html 中搜索任何指示时间的数字,仍然什么也没有。在整个源代码中,似乎没有任何数字表示时间。我缺少什么?如何解决这个问题呢?感谢任何帮助,我对这一切都很陌生。

最佳答案

此示例演示如何使用 json 模块解析 json 数据中的路由:

import json
import requests


# url = "https://www.ul.se/#/700600/0/Uppsala%20Centralstation%20(Uppsala)/700591/0/Stadsbiblioteket%20(Uppsala)//2/"

api_url = "https://www.ul.se/api/journey/search"

params = {
    "changeTimeType": "0",
    "dateTime": "",
    "from": "Uppsala Centralstation (Uppsala)",  # <-- 1.
    "fromPointId": "700600",  # <-- 2.
    "fromPointType": "0",
    "maxWalkDistance": "3000",
    "priorityType": "0",
    "to": "Stadsbiblioteket (Uppsala)",  # <-- 3.
    "toPointId": "700591",  # <-- 4.
    "toPointType": "0",
    "trafficTypes": "1,2,3,4,5,6,7,8,9,10,11",
    "travelWhenType": "2",
    "via": "",
    "viaPointId": "",
    "walkSpeedType": "0",
}

data = requests.get(api_url, params=params).json()
data = json.loads(data["Payload"])

# uncomment to print all data:
# print(json.dumps(data, indent=4))

for journey in data:
    for route in journey["routeLinks"]:
        print(
            "{:<40} {:<30} {:<20} {:<20}".format(
                route["from"]["name"],
                route["to"]["name"],
                route["arrivalDateTime"],
                route["departureDateTime"],
            )
        )
    print()

打印:

Uppsala Centralstation (Uppsala)         Klostergatan (Uppsala)         2021-06-27T12:56:00  2021-06-27T12:55:00 
Klostergatan (Uppsala)                   Stadsbiblioteket (Uppsala)     2021-06-27T13:01:00  2021-06-27T12:56:00 

Uppsala Centralstation (Uppsala)         Klostergatan (Uppsala)         2021-06-27T13:02:00  2021-06-27T13:00:00 
Klostergatan (Uppsala)                   Stadsbiblioteket (Uppsala)     2021-06-27T13:07:00  2021-06-27T13:02:00 

Uppsala Centralstation (Uppsala)         Klostergatan (Uppsala)         2021-06-27T13:12:00  2021-06-27T13:10:00 
Klostergatan (Uppsala)                   Stadsbiblioteket (Uppsala)     2021-06-27T13:17:00  2021-06-27T13:12:00 

Uppsala Centralstation (Uppsala)         Stadsbiblioteket (Uppsala)     2021-06-27T13:20:00  2021-06-27T13:15:00 

Uppsala Centralstation (Uppsala)         Klostergatan (Uppsala)         2021-06-27T13:20:00  2021-06-27T13:18:00 
Klostergatan (Uppsala)                   Stadsbiblioteket (Uppsala)     2021-06-27T13:25:00  2021-06-27T13:20:00 

Uppsala Centralstation (Uppsala)         Klostergatan (Uppsala)         2021-06-27T13:21:00  2021-06-27T13:20:00 
Klostergatan (Uppsala)                   Stadsbiblioteket (Uppsala)     2021-06-27T13:26:00  2021-06-27T13:21:00 

关于python - 使用Python网络抓取公交车时刻表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68150230/

相关文章:

python - 创建一个唯一的文件系统路径,没有任何实际文件

jquery - 猫头鹰轮播缩略图

python - 学习使用 Selenium 和 Python 进行抓取

python - 获取scrapy上不同部分的数据列表

python - Pygame 运行速度超慢(~2 fps)

Python:ulimit 和不错的 subprocess.call/subprocess.Popen?

转换为列表时,python 行分隔文本中的值,将 "\n"添加到列表中的元素

javascript - 如何解决字体拦截问题?

javascript - 使用javascript动态创建元素

python - 我应该如何正确使用Selenium