文档章节

利用python+selenium_phantomjs批量获取百度指数 第二步 技术细节

爬虫张小呆
 爬虫张小呆
发布于 2017/05/18 10:12
字数 860
阅读 430
收藏 0

前面说了一大串废话,这里再不贴一点干货可能要被打了。

还是按照前面说的思路来说一些技术细节吧。

一、像人一样打开浏览器

1.1、什么叫像人一样打开浏览器?

     通常我们使用爬虫进行采集的时候,就直接一句

urllib2.urlopen(url)

完事儿。

但是在这条语句的背后是“页面一闪”没有鼠标,没有加载,只是拿下来该页面的源码。而今天准备做的百度指数项目,该数据以加密背景图片展示。所以用这种方法是没有办法拿到的,必须得“像人一样”的打开浏览器。

这里使用的手段是selenium。

安装selenium

在配好pip的情况下直接

pip install selenium

就可以了,如果你还没有配好pip,请自行百度之。本篇实在是说不完了。(-。-)

二、像人一样打开页面。

2.1、获取准确的网址。已知百度指数的网址是www.index.baidu.com。要想获取相应关键词的百度指数,只需要在后面贴上对应的参数就行了。?tpl=trend&word=(urlencode后的关键词)。

这里?tpl是代表,页面对应“趋势研究”选项。

2.2、像人一样等待打开的页面加载完成。渲染出百度指 数的图片为止。

2.3、渲染完成之后你会发现,打开的页面还需要登录,猜能够进行指数的查询。所以这里需要引用selenium中

from selenium.webdriver.common.keys import Keys

三、让机器定位百度指数的x,y坐标。

这里会用到selenium driver 中的find_element_by_的方法。找到百度指数图片的x和y的坐标,把他保存在内存中。

四、使用selenium 中提供的截屏方法get_screenshot_as_file。将渲染完成的页面用图片的格式保存下来。

五、在图片中找到第三步中拿到的x,y坐标。并且按照相应的尺寸拿出百度指数的图片。但并不保存在本地,只把它放在内存里。

六、识别保存在内容中的图片的文字。

6.1、先在准备工作中拿出一部分的百度指数的数字图片,将每个数字转换成向量。最后进行配对。(较复杂,不细说了)具体方法详见    我是怎样利用python PIL将图片数字读出来的?

6.2、使用pytesseract库中的image_to_string方法,两行代码直接转成字符串。

写到这里技术细节也就基本说完了,但是这里需要考虑到一点。使用“浏览器打开页面并且等待加载完成”这种操作。比较消耗时间和内存。怎么样提高速度和减少占用的内存呢?

补充:

1、使用多线程技术threading来多线程采集,加快速度。

2、使用phantomjs浏览器,因为这个浏览器没有图形界面,所以占用的资源会相对来说少一些,而且可以让程序在无图形界面的服务器中运行。

具体代码请见    利用python+selenium_phantomjs批量获取百度指数 第三步 代码

这里只贴了一个主文件。全部代码请见我的公众号“爬虫张小呆”

有代码经验的同学请见我的github:

https://github.com/plus0318/BaiduIndex

© 著作权归作者所有

共有 人打赏支持
爬虫张小呆
粉丝 1
博文 21
码字总数 13945
作品 0
私信 提问
加载中

评论(1)

码马
码马
为啥不直接不分析网络请求,没想到还有你这种操作。。
Web 自动化测试与智能爬虫利器:PhantomJS 简介与实战

估计部分同学没听过这个工具,那先简单介绍下它的背景与作用。 1、PhantomJS 是什么? PhantomJS是一个基于WebKit的服务器端JavaScript API,它无需浏览器的支持即可实现对Web的支持,且原生...

大数据之路
2015/04/28
0
2
聊聊phantomjs的优化措施

序 本文主要小结一下phantomjs的优化措施 phantomjs phantomjs相当于一个后台浏览器,有点内嵌jetty的味道,通常在自动化测试或者爬虫领域用。 优化点 池化技术,避免重复启动 对于其他语言进...

go4it
2017/11/07
0
0
ubuntu 安装phantomjs、chromedriver、geckodriver

一、安装phantomjs 1.从官网下载http://phantomjs.org/download.html 2.加压 tar -zxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 3.mv phantomjs-2.1.1-linux-x86_64 /usr/local/share/phanto......

littlemesieV
04/18
0
0
PhantomJs 2 Headless Chrome

PhantomJS is dead, long live headless browsers 这是一个从PhantomJs走到Headless Chrome的故事,趟过了Highcharts的性能问题的坑,掉入过中文官方文档的错误的坑,尝试过依赖库的源码修改...

charleschu
04/14
0
0
网页前端持续集成(2) - qunit+JSCoverage+PhantomJS使用小记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/teaspring/article/details/17266247 今年早些时候为公司项目做过一些网页前端程序的持续集成(CI),在过去的几...

teaspring
2013/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jrebel 激活服务,在springboot上面的进行热部署

1.安装JRebel 下载Jrebel插件,官网需要翻墙下载,需要的可以在csdn的下载区去进行下载 打开idea,File->settings 然后重启idea 2.破解JRebel 首先HELP -> JRebel -> Activation 在jrebel se...

glen_xu
52分钟前
1
0
设置版头的图片+网页布局

1.div的background-image(推荐) 2.div+image 1.是只有部分图,2是压图 1.frame 2.js(推荐) 因为frame不好设置大小

木之下
56分钟前
0
0
MyBatis组件之缓存实现及使用

一 .概述 先讲缓存实现,主要是mybatis一级缓存,二级缓存及缓存使用后续补充 Mybatis缓存的实现是基于Map的,从缓存里面读写数据是缓存模块的核心基础功能; 除核心功能之外,有很多额外的附...

Ala6
今天
1
0
SpringBoot中使用@RequestBody时如何自定义需要转换的日期格式

SpringBoot序列化和反序列化Json时默认使用的是Jackson(例如使用@RequestBody反序列化前端传递过来的Json字符串时), 当我们前端使用Json字符串传递到后台时日期格式可能是时间戳(即long类...

帅得拖网速
今天
1
0
可自定义扩展底部列表对话框ListBottomSheetDialogFragment

因为需要,为了方便,构建了一个可以自定义扩展的底部列表对话框,可以应付大部分场景。 效果图如下: 1.默认实现: 2.自定义列表实现 3.自定义头部和列表实现 一.可实现功能 1.默认可实现通...

明月春秋
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部