【爬取动态网页-以黄河水文站数据为例】

爬取动态网页-以黄河水文站数据为例

一、项目背景

这个项目来源于我的本科毕业设计的一部分,导师让我去搜集这方面的数据。

二、项目过程

1、问题初探

由于我前期跟着MOOC学习了python编程语言,所以我打算用python编写爬虫程序来解决这个问题。但是我没有学过爬虫,所以我花了半天左右的时间在MOOC上学习了爬虫的基本知识,例如requests库和bs4库等等。当我学完去实践的时候发现,这个教程是针对静态网页的。由于我需要爬取2002年—至今每一天的数据,所以我必须知道动态页面是怎么爬取的。我开始在网络上搜索相关的解决办法,下面的这篇文章给了我启发,并进行了里面方法的尝试。
爬虫入门_7:动态加载数据处理及案例实战

2、难点突破

selenium环境安装

第一步是安装selenium,第二步是下载对应的浏览器驱动程序,我下的谷歌浏览器的驱动程序,注意只有针对32位的驱动程序,64位的也能用,还有要下载对应的浏览器版本。具体操作步骤网上挺多的,这里不再赘述。

日期控件的处理

网页上的日期是需要下拉选择的,不能手动输入日期,如下图所示:
在这里插入图片描述
第一,我得去除日期的只读属性。找到标签,并将’readonly’属性删除:

js='document.getElementById("ContentLeft_menuDate1_TextBox11").removeAttribute("readonly");'

第二,清空原来的日期数据,输入想要的日期数据:

browser.execute_script(js)
browser.find_element(By.ID,'ContentLeft_menuDate1_TextBox11').clear()#清空原来的数据
browser.find_element(By.ID,'ContentLeft_menuDate1_TextBox11').send_keys(date[i])

最后,最重要的一步。用selenium模拟点击按钮:

browser.find_element(By.ID,'ContentLeft_Button1').click()#模拟点击按钮

至此,最难的一步完成了,接下来的操作就是单纯针对静态页面的,不予赘述。

三、项目python代码

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
import bs4
import csv
import datetime
import time
time_start=time.time()
    # 生成日期数据
def create_assist_date(datestart=None, dateend=None):
    # 创建日期辅助表

    if datestart is None:
        datestart = '2016-01-01'
    if dateend is None:
        dateend = datetime.datetime.now().strftime('%Y-%m-%d')

    # 转为日期格式
    datestart = datetime.datetime.strptime(datestart, '%Y-%m-%d')
    dateend = datetime.datetime.strptime(dateend, '%Y-%m-%d')
    date_list = []
    date_list.append(datestart.strftime('%Y-%m-%d'))
    while datestart < dateend:
        # 日期叠加一天
        datestart += datetime.timedelta(days=+1)
        # 日期转字符串存入列表
        date_list.append(datestart.strftime('%Y-%m-%d'))
    return date_list


if __name__ == '__main__':
    date = create_assist_date("2002-01-01", '2002-12-31')
for i in range(len(date)):
    # 设置selenium使用chrome的无头模式
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    # 在启动浏览器时加入配置
    browser = webdriver.Chrome(options=chrome_options)
    # 模拟浏览器打开网址
    browser.get('http://61.163.88.227:8006/hwsq.aspx?sr=0nkRxv6s9CTRMlwRgmfFF6jTpJPtAv87')
    # 等待加载,最多等待20秒
    js='document.getElementById("ContentLeft_menuDate1_TextBox11").removeAttribute("readonly");'
    browser.execute_script(js)
    browser.find_element(By.ID,'ContentLeft_menuDate1_TextBox11').clear()#清空原来的数据
    browser.find_element(By.ID,'ContentLeft_menuDate1_TextBox11').send_keys(date[i])
    browser.find_element(By.ID,'ContentLeft_Button1').click()#模拟点击按钮
    sleep(2)
    html=browser.page_source
    soup=BeautifulSoup(html,'html.parser')
    data=soup.find_all('table','mainTxt')
    f = open('data2002.csv', 'a+', newline="", encoding='utf-8')
    writer = csv.writer(f)
    for tr in data[1]('tbody')[0].children:#注意因为data[1]('tbody')是列表,必须加上[0]
        if isinstance(tr,bs4.element.Tag):
            tds=tr('td')
            writer.writerow([date[i],tds[0].string,tds[1].string,tds[2].string,tds[3].string,tds[4].string])
    for tr in data[2]('tbody')[0].children:#注意因为data[2]('tbody')是列表,必须加上[0]
        if isinstance(tr,bs4.element.Tag):
            tds=tr('td')
            writer.writerow([date[i],tds[0].string,tds[1].string,tds[2].string,tds[3].string,tds[4].string])
    f.close()
time_end=time.time()
print('共运行{}s'.format(time_end-time_start))
### 回答1: 黄河流域水系分布shp是一种地理信息文件格式,用于表示黄河流域水系在地图上的分布情况。黄河流域是我国最重要的流域之一,位于中国的黄土高原地区,主要以黄河为中心,包括黄河及其支流和附属河流。 黄河流域水系分布shp文件是通过地理信息系统(GIS)技术收集和整理的,基于实地勘测和各种空间数据的分析得出。该文件记录了黄河流域水系的空间范围、河流的走向、支流的连接关系等信息。 根据黄河流域水系分布shp文件,我们可以清晰地了解到黄河及其支流的分布情况。黄河主流呈东西走向,从青海源头开始向东流经青海、甘肃、宁夏、内蒙古、陕西、山西、河南等地,最终注入渤海。在黄河两岸分布着许多大小不一的支流,如洮河、浑河、沁河、滹沱河等。 黄河流域水系分布shp文件还可以为黄河流域的水资源管理、河道治理以及防洪工程的规划和设计提供有力的支持。同时,该文件也为研究黄河流域的水文地理特征、水文过程以及生态环境等提供了宝贵的数据资源。 总之,黄河流域水系分布shp文件是一种重要的地理信息文件格式,通过它我们可以直观地了解到黄河及其支流的分布情况,为黄河流域的水资源管理和生态保护提供科学依据。 ### 回答2: 黄河流域水系分布shp文件是指一个地理信息系统文件,其中记录了黄河流域地区的各类水系要素的空间位置和属性信息。这个shp文件通常由多个矢量文件组成,包括、线和面等多种要素类型。 黄河流域是中国的第二大水系,范围涵盖黄河及其支流所形成的所有水域。黄河流域水系分布shp文件记录了这些水域的几何形状和属性信息,可以在地理信息系统软件中进行查看和分析。 黄河流域水系分布shp文件中的要素代表了一些特定的水体或水文站,如湖泊、水库或监测站。线要素则表示黄河及其主要支流的河流路径。通过这些线要素,我们可以清晰地看到黄河流域主要河流的分布情况以及它们的流向和交汇关系。而面要素则可以用来表示一些较大的水体,如湿地和沼泽等。 黄河流域水系分布shp文件不仅可以用于地理信息系统软件中的可视化,还可以进行许多空间分析操作。例如,可以计算黄河流域不同水域类型的总面积,研究其分布规律;或者可以进行河网密度的计算,以评估黄河流域的水系发育程度等。 总之,黄河流域水系分布shp文件是一个重要的地理信息数据集,它提供了一个完整和准确的黄河流域水系分布信息,对于相关研究和规划工作具有重要的参考价值。 ### 回答3: 黄河流域是中国最重要的水系之一,其水系包括了黄河及其支流和附属河流。根据黄河流域水系分布的shp文件,我们可以清楚地了解到黄河流域水系的结构和分布情况。 黄河流域的水系主要由黄河和其支流组成。黄河是亚洲第三长的河流,发源于青海省巴颜喀拉山地区,最后注入渤海。在黄河上游区域,存在着许多重要的支流,如白河、糜河和洮河等。 在黄河的中游地区,主要支流有河南境内的浊河和河北境内的清漳河、内黄河等。这些支流对黄河的水量和水质起着重要的调节和影响作用。 黄河的下游地区包括河南、山东和河北等省份,其中的河道比较宽阔,形成了黄河水系的主要河流。在这个区域,黄河与很多小型的附属河流汇合,如汶河、滨河等。 根据shp文件的数据,我们可以在地图上看到黄河及其支流、附属河流的精确位置和流动方向。通过分析这些数据,我们可以更好地了解黄河流域的地理特,从而采取相应的措施来保护和管理这个重要的水系。 黄河流域水系的分布shp文件为我们提供了重要的地理信息,帮助我们更好地认识和理解中国重要的水系之一。在今后的水资源保护和流域管理工作中,这些数据将发挥重要的作用。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值