抓取的网站是 吉林水文信息网,都是公开数据。本文主要讲的是如何使用selenium提取页面表格,下面***号间的代码就是提取表格的代码,只需要在开头的地方获取tr和td两个元素就可以了。原理是通过tr元素个数获知表格行数,td元素中的colspan、rowspan属性获知单元格总个数,从而计算出表格的列数。然后构建值为0的对应行列数表格,逐一将td元素中的文本填入表格,即可得到页面的表格。

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time
import os
from selenium.webdriver.common.action_chains import ActionChains
import random
import sys
import urllib.request
import urllib.parse
import socket
import xlsxwriter

def output_excel(file_name, report_data1): #输出Excel

today = time.strftime('%Y%m%d%H%M',time.localtime(time.time())); #time.struct_time(tm_year=2018, tm_mon=7, tm_mday=23, tm_hour=12, tm_min=50, tm_sec=30, tm_wday=0, tm_yday=204, tm_isdst=0)
#新建文件
filename = (os.getcwd()+'\\'+file_name+today+'.xlsx')
test_book = xlsxwriter.Workbook(filename)#添加sheet1
worksheet = test_book.add_worksheet(file_name) #往文件里面添加sheet
#worksheet.freeze_panes(1, 4)#设置窗口冻结区域  距离顶部1行,距离左边2列
bold0 = worksheet.set_column(0, 0, 10.7) #列宽
x=-1;
for report in report_data1:if len(report)==0:continuey=-1;x=x+1;for rep in report:if rep=='nan':rep=''y=y+1;try:worksheet.write(x,y,rep)except:worksheet.write(x,y,rep);#关闭文件
test_book.close()

def get_data():
os.system(‘taskkill /F /IM chrome.exe’);os.system(‘taskkill /F /IM chromedriver.exe’);

#url = r'http://httpbin.org/get?show_env=1'
#url = r'http://httpbin.org/post?show_env=1'
url = r'http://www.hydrojl.net/pages/fb/W01FirstPageNew.aspx'while(True):try:obj = webdriver.Chrome()#obj = webdriver.Firefox()obj.set_page_load_timeout(60)time.sleep(6)obj.get(url)time.sleep(10)obj.maximize_window()breakexcept:print('启动浏览器异常')os.system('taskkill /F /IM chrome.exe');os.system('taskkill /F /IM chromedriver.exe');time.sleep(20)
try:#滚动页面obj.execute_script("window.scrollBy(0,300)") #向下滚动time.sleep(3)#obj.execute_script("window.scrollBy(0,document.body.scrollHeight/5*2)")#time.sleep(2)#切换框架obj.switch_to.frame("indexFrame")  #用name来定位time.sleep(2)#print(obj.page_source)#单击 跳转页面btn = obj.find_elements_by_xpath('//form[@id="form1"]/div/div/a/img')[0]ActionChains(obj).move_to_element(btn).perform() #窗口移动到元素time.sleep(2)btn.click() #单击#obj.implicitly_wait(60)time.sleep(10)#切换框架obj.switch_to.frame("iframeContent")  #用name来定位time.sleep(2)#抓数据#**************************************************************************trlist = obj.find_elements_by_xpath('//div[@id="chg"]//tbody/tr') #行tdlist = obj.find_elements_by_xpath('//div[@id="chg"]//tbody/tr/td') #列#行:rowspan="2"#列:colspan="14"trn = len(trlist) #总行数temlist = []for td in tdlist:try:temlist.append(int(td.get_attribute('colspan')))except:temlist.append(1)try:temlist.append(int(td.get_attribute('rowspan'))-1)except:passtdn = sum(temlist)tdn = int(tdn/trn) #总列数#构建表格table = []for j in range(0,trn):table.append([0]*tdn)#tdlist 所有元素for i in range(0,trn): #行for j in range(0,tdn): #列if table[i][j]==0:td = tdlist.pop(0) #获取数据table[i][j] = td.texttry:aa = int(td.get_attribute('colspan'))#列for a in range(1,aa):table[i][j+a] = ''except:passtry:aa = int(td.get_attribute('rowspan'))#行for a in range(1,aa):table[i+a][j] = ''except:passif len(tdlist)==0:breakif len(tdlist)==0:breakfor j in table:print(j)#**************************************************************************datalist = tabletime.sleep(6)#退出程序obj.close()obj.quit()print('ok')return datalist
except:os.system('taskkill /F /IM chrome.exe');os.system('taskkill /F /IM chromedriver.exe');print('no')return []

def main():

datalist = get_data()output_excel('雨情信息', datalist)

if name==‘main’:

main()time.sleep(6)os.system('taskkill /F /IM chrome.exe');os.system('taskkill /F /IM chromedriver.exe')
#os.system('pause')

selenium抓取页面表格相关推荐

  1. selenium抓取页面可用元素css

    /** 自动生成页面*/ // 汉字转拼音 function Pinyin(l1) {var PinYin = {"a":"\u554a\u963f\u9515" ...

  2. java抓取页面表格_用java实现爬虫抓取网页中的表格数据功能源码

    [实例简介] 使用java代码基于MyEclipse开发环境实现爬虫抓取网页中的表格数据,将抓取到的数据在控制台打印出来,需要后续处理的话可以在打印的地方对数据进行操作.包解压后导入MyEclipse ...

  3. selenium抓取_使用Selenium的网络抓取电子商务网站

    selenium抓取 In this article we will go through a web scraping process of an E-Commerce website. I hav ...

  4. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语 ...

  5. jquery页面跳转带cookie_搭建谷歌浏览器无头模式抓取页面服务,laravelgt;phpgt;pythongt;docker...

    背景: 公司管理系统需要获取企业微信页面的配置参数如企业名.logo.人数等信息并操作,来隐藏相关敏感信息并自定义简化企业号配置流程 第一版已经实现了扫码登录获取cookie,使用该cookie就能获 ...

  6. [Python] python + selenium 抓取 京东商品数据(商品名称,售价,店铺,分类,订单信息,好评率,评论等)

    目录 一.环境 二.简介 三.京东网页分析 1.获取商品信息入口--商品列表链接获取 2.获取商品信息入口--商品详情链接获取 3.商品详情获取 4.商品评论获取 四.代码实现 五.运行结果 六.结语 ...

  7. python 无头模式_搭建谷歌浏览器无头模式抓取页面服务,laravel-php-python-docker !!!...

    背景: 公司管理系统需要获取企业微信页面的配置参数如企业名.logo.人数等信息并操作,来隐藏相关敏感信息并自定义简化企业号配置流程 第一版已经实现了扫码登录获取cookie,使用该cookie就能获 ...

  8. [Python] scrapy + selenium 抓取51job 职位信息(实现 传参 控制抓取 页数+职位名称+城市)

    目录 一.目标 二.51job网页分析: 1.网页构成观察 2.网页分析 三.代码实现 1. 踩过的坑-----实现城市选择 2.代码实现 3.代码优化 1)存放格式优化 2)在爬虫中去掉\xa0\x ...

  9. selenium抓取动态网页数据

    1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...

最新文章

  1. fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
  2. 【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )
  3. Linux卸载蓝牙模块,Linux 下调试低功耗蓝牙的笔记
  4. 关于C# Winform DataGridView 设置DefaultCellStyle无效的原因与解决方案
  5. eclipse/myeclipse中如何开启断言调试代码
  6. 【转来警醒自己】最近的一些面试感悟
  7. Django单元测试
  8. C++学习之路 | PTA(甲级)—— 1064 Complete Binary Search Tree (30分)(带注释)(精简)
  9. 王俊和尹玉新团队合作开发代谢组联合人工智能肺癌早期检测新方法
  10. 直播丨分布式数据库:从PG-XL到TBASE
  11. 算法知识点——(2)模型评估
  12. api 读内存整数_10万+QPS 真的只是因为单线程和基于内存?
  13. Windows10安装Matlab 2018b教程
  14. 阿里云Maven仓库
  15. 计算机中1kb等于多少字节,1kb等于多少个字节
  16. android mmdd 时间问题
  17. 电影“我是谁,没有绝对安全的系统“——黑客技术点评
  18. 风控人不能不知的黑产大揭秘
  19. “钢管舞女孩”之我见
  20. 讷于言而敏于行_百度百科

热门文章

  1. 多重障碍儿童个案分析
  2. Caffe概览及mnist数据集训练
  3. RFID技术在物流分拣的应用
  4. 表单、表格常用属性大全
  5. 1076. Wifi密码 (15)
  6. 安卓日记 二 UI组件
  7. IT、CS、IS, 计算专业傻傻分不清楚? 这有何难
  8. 禁用某盾加密破解、黄盾加密、sdhelper2.exe
  9. QStringList去重
  10. 【资料】【哈代/拉马努金】悼文