用Selenium(Python)在一个网站上抓取所有工具提示?

2024-10-02 02:41:59 发布

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

我目前正在尝试抓取这个网站 https://schedule.townsville-port.com.au/

我想在所有单独的工具提示中刮取文本。在

下面是我要悬停的典型元素的html格式

<div event_id="55591" class="dhx_cal_event_line past_event" style="position:absolute; top:2px; height: 42px; left:1px; width:750px;"><div> 

下面是工具提示的典型html格式

^{pr2}$

我尝试过各种组合,例如尝试直接获取工具提示,也尝试通过将鼠标悬停在需要悬停的位置来刮取html。在

tool_tips=driver.find_elements_by_class_name("dhx_cal_event_line past_event")

tool_tips=driver.find_elements_by_xpath("//div[@class=dhx_cal_event_line past_event]")

tool_tips=driver.find_element_by_css_selector("dhx_cal_event_line past_event")

我也尝试过用“dhtmlXTooltip tooltip”代替“dhx_cal_event_line pass_event”来执行相同的代码

我真的不明白为什么。在

tool_tips=driver.find_elements_by_class_name("dhx_cal_event_line past_event")

不起作用。在

美的素可以用来解决这个问题吗?既然html是动态变化的?在


Tags: 工具diveventbyhtmldriverlineelements
1条回答
网友
1楼 · 发布于 2024-10-02 02:41:59

如果您在Chrome DevTools中打开Network选项卡并按XHR筛选,您可以看到该网站向http://schedule.townsville-port.com.au/spotschedule.php发出请求。在

from bs4 import BeautifulSoup
import requests

url = 'http://schedule.townsville-port.com.au/spotschedule.php'
r = requests.get(url, verify=False)
soup = BeautifulSoup(r.text, 'xml')

transports = {}
events = soup.find_all('event')

for e in events:
    transport_id = e['id']
    transport = {child.name: child.text for child in e.children}
    transports[transport_id] = transport

import pprint
pprint.pprint(transports)

输出:

^{pr2}$

我发现摆脱SSLError的唯一方法是使用verify=False禁用证书验证,您可以阅读有关它的更多信息here。在

请注意,start_date和{}是UTC时间,因此您可以指定timeshift查询参数:

import time

utc_offset = -time.localtime().tm_gmtoff // 60  # in minutes    
url = f'http://schedule.townsville-port.com.au/spotschedule.php?timeshift={utc_offset}'

或者转换日期并将其存储为datetime对象(您可以阅读有关将时间从UTC转换为本地时区here)的内容。在

相关问题 更多 >

    热门问题