您的位置:首页 > 编程语言 > Python开发

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

2017-10-23 00:20 211 查看
前面说了一大串废话,这里再不贴一点干货可能要被打了。

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

一、像人一样打开浏览器

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  selenium 百度指数