对温度、位置和时间进行网页抓取,然后写入csv的问题

2024-04-20 05:55:40 发布

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

我正在为温度、时间和地点设计一个楼宇自动化系统。我没有问题得到的信息出iframe和命令行,但得到一个csv文件我不能。另外,我希望把数据列和行。我的基本代码是在这里工作,但我还没有找到任何类似的,以帮助我。系统响应请求的速度也很慢,原因是每件事之间都有睡眠。这仅仅是我开始的3分,还有大约30分我要努力。你知道吗

它应该是这样的(命令行):

Space: Lower Hall,
Temperature:  19.6 ºC,
Timestamp: 1521204222910

这是我得到的(csv输出):

<function data1 at 0x000001CC46775730>
<function data1 at 0x000001CC4ECA89D8>
<function data1 at 0x000001CC46775730>

基本代码

iframes = driver.find_elements_by_tag_name("iframe")
driver.switch_to.frame(iframes[1])

time.sleep(5)

while True:

    time.sleep(5)

        def data1():
            element=driver.find_element_by_id("root.content.BoundLabel12") 
            print("Space: Lower Hall","\nTemperature: ", element.text)
            temperature = element.text
            when_updated=driver.find_element_by_name("_lastUpdated")
            timestamp=when_updated.get_attribute("value")
            print("Timestamp:", timestamp)
            print("") #space out on cmd line

    time.sleep(1)

        def data2():

            element=driver.find_element_by_id("root.content.BoundLabel1") 
            print("Space: Den\Bedroom 3","\nTemperature: ", element.text)
            when_updated=driver.find_element_by_name("_lastUpdated")
            timestamp=when_updated.get_attribute("value")
            print("Timestamp:", timestamp)
            print("")

    time.sleep(1)

        def data3():

            element=driver.find_element_by_id("root.content.BoundLabel33") 
            print("Space: Lower Bathroom" , "\nTemperature: ", element.text)
            date = when_updated=driver.find_element_by_name("_lastUpdated")
            timestamp=when_updated.get_attribute("value")
            print("Timestamp:", timestamp)
            print("")

    time.sleep(60)

        data = ([data1()])

        with open('writer.csv', 'a') as file:
            writer = csv.writer(file)
            writer.writerows(data())

    nos=1  # Number of samples
    freq=25  # Sampling frequency
    print("\nTemperature & timestamp, sampled every", freq, "seconds:")

    while True:
    #for i in range(nos):
        ts=driver.find_element_by_name("_lastUpdated").get_attribute("value")
        #print("\nTemperature: ", element.text, "read at:", ts)
        time.sleep(freq)

    driver.switch_to_default_content()

    print ("Done.")

Tags: csvtextnamebytimedriversleepelement
1条回答
网友
1楼 · 发布于 2024-04-20 05:55:40

您缺少了一些python的基础知识。首先,如果你发现你在写很多函数做同样的事情,你可以也应该把它们写成一个函数。第二,这就是问题所在,在函数中没有返回任何数据。它是打印出你的结果,因为print不需要返回到工作状态,但是当你试图将这些函数写入csv时,因为它们没有返回任何东西,所以它只是在写那个函数。对代码的这些编辑解决了我的上述问题:

time.sleep(5)

data = []

def get_data(id)
    time.sleep(1)
    element=driver.find_element_by_id(id) 
    print("Space: Lower Hall","\nTemperature: ", element.text)
    temperature = element.text
    when_updated=driver.find_element_by_name("_lastUpdated")
    timestamp=when_updated.get_attribute("value")
    print("Timestamp:", timestamp)
    print("") #space out on cmd line  
    return temperature, when_updated, timestamp      



data.append(get_data("root.content.BoundLabel12"))
data.append(get_data("root.content.BoundLabel1"))
data.append(get_data("root.content.BoundLabel33"))


time.sleep(60)


with open('writer.csv', 'a') as file:
    writer = csv.writer(file)
    for d in data:
        writer.writerows(d)

nos=1  # Number of samples
freq=25  # Sampling frequency
print("\nTemperature & timestamp, sampled every", freq, "seconds:")

while True:
#for i in range(nos):
    ts=driver.find_element_by_name("_lastUpdated").get_attribute("value")
    #print("\nTemperature: ", element.text, "read at:", ts)
    time.sleep(freq)

driver.switch_to_default_content()

print ("Done.")

如果您是python新手,我建议您阅读一下: https://www.tutorialspoint.com/python/python_functions.htm

相关问题 更多 >