原文地址:http://blog.chinaunix.net/uid-22414998-id-3695673.html

续前文:《数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置》。


程序优化:第一步

开始:

  1. for i in range(startx,total):
  2. for j in range(starty,total):
  3. BASE_URL = createTheUrl([item[i],item[j]])
  4. driver.get(BASE_URL)
  5. driver = webdriver.PhantomJS()
  6. html = driver.page_source
  7. output = filterOutcome(html)
  8. driver.quit()
  9. print 'i='+str(i)+'tj='+str(j)+'tresult='+str(output)
  10. j += 1

每个耗时约27秒。

修改后:

  1. driver = webdriver.PhantomJS()
  2. for i in range(startx,total):
  3. for j in range(starty,total):
  4. BASE_URL = createTheUrl([item[i],item[j]])
  5. driver.get(BASE_URL)
  6. html = driver.page_source
  7. output = filterOutcome(html)
  8. print 'i='+str(i)+'tj='+str(j)+'tresult='+str(output)
  9. if output == -1:
  10. driver.quit()
  11. exit(0)
  12. j += 1
  13. driver.quit()

这回只分析了3个,共52秒,每个耗时约17秒,只是因为避免了重复PhantomJS的开启、运行和关闭这一过程

程序优化:第二步
      减少对角线重复请求次数

  1. driver = webdriver.PhantomJS()
  2. for i in range(startx,total):
  3. if starty != -1:
  4. k = i
  5. else:
  6. k = starty
  7. for j in range(k,total):
  8. BASE_URL = createTheUrl([item[i],item[j]])
  9. driver.get(BASE_URL)
  10. html = driver.page_source
  11. output = filterOutcome(html)
  12. print 'i='+str(i)+'tj='+str(j)+'tresult='+str(output)
  13. if output == -1:
  14. driver.quit()
  15. exit(0)
  16. #toexcel("C:catchoutput.xlsx","Sheet1",output,i,j)
  17. j += 1
  18. driver.quit()

和上面的待分析的个数一样,花费21秒,每个耗时约7秒。如果开启excel存储,则共花费25秒,每个耗时约8秒。

程序优化:第三步
      减少写入Excel的次数,提高硬盘性能。当然,数据量越大,次数越多,效果越明显。这次把Excel一直打开,每隔20个保存一次。

  1. #打开Excel插件
  2. xlsApp = win32com.client.Dispatch("Excel.Application")
  3. xlsBook = xlsApp.Workbooks.Open('C:catchoutput.xlsx')
  4. xlsSheet = xlsBook.Sheets('Sheet1')
  5. #开启webdirver的PhantomJS对象
  6. driver = webdriver.PhantomJS()
  7. #main()
  8. for i in range(startx,total):
  9. if starty != -1:
  10. k = i
  11. else:
  12. k = starty
  13. for j in range(k,total):
  14. BASE_URL = createTheUrl([item[i],item[j]])
  15. driver.get(BASE_URL)
  16. html = driver.page_source
  17. output = filterOutcome(html)
  18. print 'i='+str(i)+'tj='+str(j)+'tresult='+str(output)
  19. mycounter += 1
  20. if output == -1:
  21. driver.quit()
  22. xlsBook.Save()
  23. xlsBook.Close()
  24. xlsApp.Quit()
  25. exit(0)
  26. xlsSheet.Cells(j+1,i+1).Value = xlsSheet.Cells(i+1,j+1).Value = output
  27. #每隔20个保存一次,并重新清零
  28. if mycounter%20 == 0:
  29. print "~~~~~~ SAVED HERE ~~~~~~"
  30. xlsBook.Save()
  31. mycounter = 0
  32. j += 1
  33. #程序结束前的清扫工作
  34. driver.quit()
  35. xlsBook.Save()
  36. xlsBook.Close()
  37. xlsApp.Quit()

      结果如下:

  1. >>>
  2. 请输入起始XaaS的序号X:0
  3. 请输入起始XaaS的序号Y:0
  4. 待处理数据记录总数:8 条
  5. 待处理握手总数:36 次
  6. 读取info.txt文件成功
  7. 计时开始!
  8. ----------------
  9. i=0 j=0 result=14000000
  10. i=0 j=1 result=2
  11. i=0 j=2 result=8
  12. i=0 j=3 result=1
  13. i=0 j=4 result=80400
  14. i=0 j=5 result=2
  15. i=0 j=6 result=3
  16. i=0 j=7 result=8470
  17. i=1 j=1 result=394000
  18. i=1 j=2 result=3140
  19. i=1 j=3 result=9
  20. i=1 j=4 result=57
  21. i=1 j=5 result=7
  22. i=1 j=6 result=3790
  23. i=1 j=7 result=718
  24. i=2 j=2 result=7110000
  25. i=2 j=3 result=7
  26. i=2 j=4 result=4
  27. i=2 j=5 result=232000
  28. i=2 j=6 result=382000
  29. i=2 j=7 result=7970
  30. i=3 j=3 result=981000
  31. i=3 j=4 result=7
  32. i=3 j=5 result=1
  33. i=3 j=6 result=2
  34. i=3 j=7 result=10
  35. i=4 j=4 result=398000
  36. i=4 j=5 result=4
  37. i=4 j=6 result=3850
  38. i=4 j=7 result=1390
  39. i=5 j=5 result=275000
  40. i=5 j=6 result=32100
  41. i=5 j=7 result=8
  42. i=6 j=6 result=8050000
  43. i=6 j=7 result=67800
  44. i=7 j=7 result=738000
  45. ----------------
  46. 执行成功!
  47. 程序耗时:72 秒

    相当于每次握手,花费2秒。但这还存在一个致命伤,那就是在随着数据量的激增,以后经常要保存上万个值,每次都保存,那么次数越多写入量就会越大。只是希望微软的Excel已经能够知道:哪些是未改动数据就不必再次写入,哪些数据改动过需要写入。

程序优化:第四步
      使用多线程+使用数据库。如果不用数据库,就靠读写一个单机版的Excel,效率太低,因此我考虑用Mysql或Sqlite。最后再将结果转出来。

数据抓取的艺术(二)相关推荐

  1. 【RPA入门教程】UiBot数据抓取功能使用教学(二)

    数据抓取功能使用说明 点击 UiBot 编辑器工具栏的[数据抓取]按钮,打开数据抓取工具 数据抓取工具需要先选取一个目标,点击选择目标按钮即可. 这个目标就是要采集的数据字段,如果要采集商品名,则先选 ...

  2. 网络爬虫——中国大学排名数据抓取

    网络爬虫--中国大学排名数据抓取 目标网址 中国大学排名网:http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html 全球有很多份大学排名,这里以上 ...

  3. [Python爬虫] 三、数据抓取之Requests HTTP 库

    往期内容提要: [Python爬虫] 一.爬虫原理之HTTP和HTTPS的请求与响应 [Python爬虫] 二.爬虫原理之定义.分类.流程与编码格式 一.urllib 模块 所谓网页抓取,就是把URL ...

  4. 李沐【实用机器学习】1.3网页数据抓取

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.数据抓取工具 二.实例解析 总结 前言 网页数据抓取目标:在一个网站里面感兴趣的数据抓取出来 数据特点:噪点较多, ...

  5. 免费网站数据抓取插件,可视化页面数据抓取插件

    网站页面数据抓取插件,允许我们将数据从网站直接抓取到我们的本地或者页面.网站网页数据抓取(也称为ScreenScraping.WebDataExtraction.WebHarvesting等)是一种用 ...

  6. 20221119day12作业:顶点小说全栈抓取、京东3页数据抓取、震坤行3页数据抓取

    文章目录 一.顶点小说全站抓取(代码运行下去理论上能抓就行) 二.京东商城三页数据抓取 三.震坤行三页数据抓取 一.顶点小说全站抓取(代码运行下去理论上能抓就行) 先获取所有分类链接import re ...

  7. 基于Python爬虫的股票成交量数据抓取分析系统

    目录 数据获取 2 1.1. 实验环境搭建 2 1.2. 抓取数据 2 1.2.1. 新浪财经 3 1.2.2. 网易财经 6 1.2.3. 东方财富 12 1.2.4. TuShare (挖地兔) ...

  8. 数据抓取工具有哪些-数据抓取工具免费推荐的有哪些

    随着社会的进步,科技的发展.不管是企业还是个人都清楚地明白了数据的重要性.不仅可以让我们掌握一手资源,同时还能通过数据更清楚竞争对手.同时也告别了手动复制粘贴的痛苦. 企业人员 通过爬取动态网页数据分 ...

  9. 查询数据 抓取 网站数据_有了数据,我就学会了如何在几个小时内抓取网站,您也可以...

    查询数据 抓取 网站数据 I had a shameful secret. It is one that affects a surprising number of people in the da ...

  10. [Python爬虫] 四、数据抓取之HTTP/HTTPS抓包工具Fiddler

    往期内容提要: [Python爬虫] 一.爬虫原理之HTTP和HTTPS的请求与响应 [Python爬虫] 二.爬虫原理之定义.分类.流程与编码格式 [Python爬虫] 三.数据抓取之Request ...

最新文章

  1. LeetCode - Longest Common Prefix
  2. 中国二氧化碳激光器行业现状研究与可行性分析报告2022-2028年版
  3. 【评估价格】采购申请中的价格
  4. dxf转nc代码软件_FastCAM激光版套料软件
  5. Microsoft Enterprise Library---解读Configuration之元数据
  6. 利用ABAP调试模式修改SE16里数据库表的内容
  7. Qt实现对json文件的解析
  8. php支持哪8种数据类型,PHP八种数据类型+使用实例
  9. Mac OS使用ll、la、l等ls的别名命令
  10. 使用 v-cloak 防止页面加载时出现 vuejs 的变量名
  11. 今天谈谈COLING2018计算语言学进展
  12. php try catch 作用域,浅谈PHP中try{}catch{}的使用方法
  13. 网站压力测试的几种方法
  14. mapbox 导航_散步、骑行线路随时可查!拱墅19条绿道实名确认,还有“魔鬼导航员”带你走……...
  15. HDU 6070 Dirt Ratio
  16. 深光标准技术:谷歌GMS认证是什么?谷歌AER认证是什么?GMS认证的费用跟周期是多少??
  17. 佐治亚理工学计算机硕士,美国计算机专业硕士留学推荐:佐治亚理工学院
  18. Android 头像更换从相册选取崩溃
  19. KUKA机器人视觉1
  20. 博士生为什么纷纷逃离科研?

热门文章

  1. 测试Leader应该做哪些事
  2. Noip前的大抱佛脚----文章索引
  3. [django]django model的查询和更新
  4. 操作系统,语言分类,变量
  5. Go语言【第五篇】:Go条件语句
  6. 2015 11月9日 一周工作计划与执行
  7. SQL JOB 调用 SSIS package 权限问题
  8. 获取时间差xx小时xx分钟前
  9. .net中前台javascript与c#后台代码调用
  10. 【数据库】SQLITE3 加密3