利用python+selenium_phantomjs批量获取百度指数 第二步 技术细节
2017-10-23 00:20
211 查看
前面说了一大串废话,这里再不贴一点干货可能要被打了。
还是按照前面说的思路来说一些技术细节吧。
一、像人一样打开浏览器
1.1、什么叫像人一样打开浏览器?
通常我们使用爬虫进行采集的时候,就直接一句
完事儿。
但是在这条语句的背后是“页面一闪”没有鼠标,没有加载,只是拿下来该页面的源码。而今天准备做的百度指数项目,该数据以加密背景图片展示。所以用这种方法是没有办法拿到的,必须得“像人一样”的打开浏览器。
这里使用的手段是selenium。
安装selenium
在配好pip的情况下直接
就可以了,如果你还没有配好pip,请自行百度之。本篇实在是说不完了。(-。-)
二、像人一样打开页面。
2.1、获取准确的网址。已知百度指数的网址是www.index.baidu.com。要想获取相应关键词的百度指数,只需要在后面贴上对应的参数就行了。?tpl=trend&word=(urlencode后的关键词)。
这里?tpl是代表,页面对应“趋势研究”选项。
2.2、像人一样等待打开的页面加载完成。渲染出百度指 数的图片为止。
2.3、渲染完成之后你会发现,打开的页面还需要登录,猜能够进行指数的查询。所以这里需要引用selenium中
三、让机器定位百度指数的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.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
相关文章推荐
- 利用python+selenium_phantomjs批量获取百度指数 第一步 分析
- 利用python+selenium_phantomjs批量获取百度指数 第三步 代码
- python 利用selenium模拟登录帐号验证网站并获取cookie
- python利用selenium获取cookie实现免登陆
- python下利用Selenium获取动态页面数据
- python 利用selenium模拟登录帐号验证网站并获取cookie
- Python爬虫获取cookie:利用selenium
- 在CentOS下利用Python+selenium获取腾讯首页的今日话题。
- 利用python爬虫技术获取每天每场的每位球员NBA数据以及每日范特西评分
- Python+Selenium练习篇之12-获取浏览器的版本号
- python 爬虫 利用selenium模拟登录帐号 向requests中重设 cookie
- Python+Selenium练习篇之22-获取页面元素大小
- 好奇号利用LED光源在夜晚获取火星岩表面细节获得成功
- python3 网络爬虫(三)利用post请求获取网页的动态加载数据
- [置顶] 使用Java-selenium自动化测试技术获取网页数据(以上交所公告信息及监管信息为例)
- Python+Selenium利用link text定位元素
- 利用Python获取人人网的最近访客记录
- python利用selenium操作浏览器
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页及获取JS返回值
- selenium+Python获取弹出框内容的提醒