Python爬取水情日报

需求: 爬取2001至今每日的流量数据

存在问题: 按日显示数据,手动复制或抄录存在问题

代码:

"""""""""""""""""""""""""""
任务:爬取水情日报
难点一:网页中使用了时间控件,每页仅显示一天的数据,只允许点击不允许输入;
解决办法:找到时间输入控件,使用selenium对网页源代码进行修改,删除readonly属性,这样就可以输入日期了。
难点二:爬取表格内容
解决办法:pandas读取表格内容十分方便
"""""""""""""""""""""""""""

from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd
import time

# 输入时间序列
Datetime = pd.read_excel('05-09.xlsx')['date']
# datetime格式转化为字符串
Datetime = Datetime.dt.strftime('%Y-%m-%d')
Datelist = list(Datetime)
# 准备空表
Empty_df = pd.DataFrame()

# 设置Selenium驱动器路径
driver = webdriver.Chrome('chromedriver.exe')
# 打开目标网页
url = 'xxx'
driver.get(url)

for i in Datelist:
    new_date_time = i
    
    # 定位日期控件元素、定位“查询”控件元素、定位数据所在表格:name为xxx的input
    date_picker = driver.find_element(By.XPATH,"//input[@name='ctl00$ContentLeft$menuDate1$TextBox11']")
    inquiry = driver.find_element(By.XPATH,"//input[@name='ctl00$ContentLeft$Button1']")
    datatable = driver.find_element(By.XPATH,"//table[@class='mainTxt']")
    
    # 执行JavaScript以删除元素的指定属性
    script = "arguments[0].removeAttribute('readonly');"
    driver.execute_script(script, date_picker)
    script = "arguments[0].removeAttribute('value');" # 该属性为时间设置了一个初始值,删掉
    driver.execute_script(script, date_picker)

    # 输入新的日期时间值
    date_picker.send_keys(new_date_time)
    
    # 点击查询
    inquiry.click()
    
    # 获取表格
    table = pd.read_html(datatable.get_attribute('outerHTML'))[0][2:]
    table['Date']=new_date_time
    table = table.drop(29)
    table = table.set_index('Date')
    Empty_df = Empty_df.append(table)
    
    # 刷新页面
    driver.refresh()
    time.sleep(1)


# 关闭驱动器
driver.quit()
Empty_df.to_excel('05-09_runoff.xlsx')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值