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

一、项目背景

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

二、项目过程

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_listif __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_sourcesoup=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. python动态页面元素爬取_python编程练习:爬虫爬取动态网页批量下载气象站数据...

    一.功能介绍 基于python爬虫下载全国温室数据系统的气象数据[http://data.sheshiyuanyi.com/WeatherData/]1-1 二.网页分析2-1 2-2 2-3 三.代 ...

  2. 爬取动态网页数据的软件-抓取动态网页数据的工具

    爬取动态网页数据,随着时代的进步,互联网的发展,不管是企业还是个人都知道了数据的重要性.今天给大家分享一款免费爬取动态网页数据的软件.只要点点鼠标就能轻松爬取到你想要的数据,不管是导出还是自动发布都支 ...

  3. Windows下利用python+selenium+firefox爬取动态网页数据(爬取东方财富网指数行情数据)

    由于之前用urlib和request发现只能获取静态网页数据,目前爬取动态网页有两种方法, (1)分析页面请求 (2)Selenium模拟浏览器行为(霸王硬上弓),本文讲的就是此方法 一.安装sele ...

  4. python爬取动态网页_python爬取动态网页数据,详解

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ...

  5. chrome动态ip python_用Python爬虫爬取动态网页,附带完整代码,有错误欢迎指出!...

    系统环境: 操作系统:Windows8.1专业版 64bit Python:anaconda.Python2.7 Python modules:requests.random.json Backgro ...

  6. python动态页面元素爬取_爬取动态网页python+Web kit

    上一篇文章爬取动态网页python+selenium+webdriver介绍了爬取动态网站的一种模拟浏览器的方法,该方法的优劣也很明显 优: 可以模拟任何人的操作,输入账号密码,点击登录等等操作 劣: ...

  7. Python之网络爬虫(selenium爬取动态网页、爬虫案例分析、哈希算法与RSA加密)

    文章目录 一.selenium爬取动态网页 二.爬虫案例分析 三.哈希hash算法与RSA加密 一.selenium爬取动态网页 1.动态网页认知 爬虫其实就是在模仿浏览器的行为 应对要多次数据的交互 ...

  8. Python爬虫爬取动态网页

    系统环境: 操作系统:Windows8.1专业版 64bit Python:anaconda.Python2.7 Python modules:requests.random.json Backgro ...

  9. python动态渲染抓取网页_爬取动态网页python+Web kit

    上一篇文章爬取动态网页python+selenium+webdriver介绍了爬取动态网站的一种模拟浏览器的方法,该方法的优劣也很明显 优: 可以模拟任何人的操作,输入账号密码,点击登录等等操作 劣: ...

最新文章

  1. java 移动页面中的图片上传_移动端图片操作——上传
  2. 从零开始学_JavaScript_系列(24)——查看对象属性,合并数组
  3. python的中文含义-python中的 * 和 ** 作用含义
  4. java.sql.SQLException: ORA-00923: FROM keyword not
  5. disconf mysql_disconf浅入浅出(一)disconf简介以及disconf-web端使用
  6. 基于Quartus II的在线调试方法
  7. 数据分析基于朴素贝叶斯的书籍评价信息分类
  8. word删除分节符后之前的格式乱了_办公室高级技能之Word邮件合并拆分
  9. 怎样发量暴增_发量少怎么增加发量 秃发女孩必学发量激増6招
  10. 机器学习面试- Scikit-learn
  11. 转载--程序员最喜欢的技术书大都出自这 20 家出版社
  12. spring 定时器_细数那些使用过的定时器
  13. Android WebView性能分析与优化
  14. 微软拼音输入法自定义短语
  15. 减肥就来红光光浴吧,健康又安全
  16. 【Cocos2D-x 3.5实战】坦克大战(1)环境配置
  17. 2022 最新 JCR正式发布全球最新影响因子名单(前600名)
  18. 商业模式分析——3W2H分析法
  19. 古代汉语王力版复习重点要点
  20. 计算机安装Hp1005打印机,hp1005打印机驱动

热门文章

  1. excel删除空格之后的字符
  2. excel 删除字段的前后空格
  3. 数据可视化:部分整体类可视化图表大全
  4. 3dsmax常用操作(持续更新)
  5. 【渝粤教育】广东开放大学 文化经济实务 形成性考核 (56)
  6. Ubuntu安装解码器解决浏览器内不能播放音频的问题
  7. 悟透JavaScript[转]
  8. paper 129 : 比较好的开源人脸识别软件
  9. Discuz!开发之用户积分数额增减操作updatemembercount()函数解析
  10. 移动端适配+flexible.js+rem适配