【问题标题】:Using Selenium in Python, webscraping using find elements by xpath, .text在 Python 中使用 Selenium,使用 xpath 查找元素进行网页抓取,.text
【发布时间】:2018-11-07 13:37:10
【问题描述】:

我正在尝试使用 Python 和 Selenium 自动执行每周必须执行的任务。

我访问一个网站,如果有任何新文件,我会下载它们,使用它们进入的日期和访问者重命名它们,然后将它们放在共享网络服务器上的文件夹中。

网站通过可点击的链接提供文件进入的日期。

使用 xpath 的 find 元素,我假设是参数,开头和包含,我已经能够搜索所有带有日期和时间的链接。

receivedTime = browser.find_elements_by_xpath('//*[starts-with(@id, 
"anchor") and contains(@id, "_0")]')
for time in receivedTime:
 print(time.text)

输出如下所示,例如“11/2/2018, 8:00:50 AM”。

我想将该文本格式化为“2018-11-02”,我该怎么做?

据我了解,变量 time 只是当前 Xpath 的一个对象,而 .text 只是该对象的一个​​属性。我的理解正确吗?

谢谢。

回答:

receivedTime = browser.find_elements_by_xpath('//*[starts-with(@id, 
"anchor") and contains(@id, "_0")]')
for time in receivedTime:
 date = str(time.text).split(',')
 dateTime = datetime.strptime(date[0], '%m/%d/%Y').strftime('%Y-%m-%d-')
 print(dateTime)

【问题讨论】:

    标签: python selenium selenium-webdriver formatting string-formatting


    【解决方案1】:

    你应该使用包datetime (import datetime)
    time 变量是一个字符串,因此您必须将其转换为 datetime 并像这样更改格式:

    date = str(time.text).split(',')
    datetime.datetime.strptime(date[0], '%m/%d/%Y').strftime('%Y-%m-%d')
    

    【讨论】:

    • 我已经在使用包 datetime 来比较日期,所以这很好。
    • 如果我理解正确的话。您将日期设置为等于 time.text 字符串的变量,然后使用命令 split 在 之前和之后拆分字符串,从那里,您使用 datetime 包和 string to datetime 函数将字符串转换为 datetime . (最佳猜测)- date[0] 将变量 date 设置为仅在逗号前面的内容,而 0 删除了逗号后面的内容。在此过程中还格式化日期时间然后使用 strftime 将日期时间转换回所需格式的字符串。对吗?
    • receivedTime = browser.find_elements_by_xpath('//*[starts-with(@id, "anchor") and contains(@id, "_0")]') for time in receivedTime: date = str(time.text).split(',') dateTime = datetime.strptime(date[0], '%m/%d/%Y').strftime('%Y-%m-%d-')打印(日期时间)
    • 是的,没错,我使用 split() 只选择了 11/2/2018,因为这是需要格式化的。
    • 感谢您的回答。我使用您提供的代码和逻辑进行了一些更改,找到了我的答案。您可以在我对问题进行编辑后找到代码。
    【解决方案2】:

    您还可以使用正则表达式来提取数字并重新格式化日期:

    import re
    text = "11/2/2018, 8:00:50 AM"
    date_tuple = re.match("(\d+)\/(\d+)\/(\d+)", text).groups()
    file_name = "%d-%02d-%02d" % (int(date_tuple[2]), int(date_tuple[0]), int(date_tuple[1]))
    

    结果:“2018-11-02”

    【讨论】:

    • 以前从未使用过该软件包。必须将文本作为当前 xpath 更改的任何内容。不确定 date_tuple 中的 d+ 是什么,最好的猜测是占位符。不确定 file_name 中的 %02 代表什么。我在一定程度上理解的其他所有内容。
    猜你喜欢
    • 2023-01-25
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2018-07-20
    • 2020-03-13
    • 1970-01-01
    相关资源
    最近更新 更多