Selenium模拟浏览器初识
Seleniumd介绍
在写Python爬虫的时候,最麻烦的不是那些海量的静态网站,而是那些通过JavaScript获取数据的站点。Python本身对js的支持不好,所以就有良心的开发者来做贡献了,这就是Selenium,他本身可以模拟真实的浏览器,浏览器所具有的功能他都有哦,加载js更是小菜了。
Selenium的安装:
使用pip命令,你可以像下面这样安装 selenium:
pip install selenium
大家可以参考一下中文文档。
浏览器的选择:
在写爬虫的时候,用到最多的就是Selenium的Webdriver,当然,webdriver也不可能支持所有的浏览器,让我们看看他支持哪些浏览器吧:
from selenium import webdriver
help(webdriver) PACKAGE CONTENTS
android (package)
blackberry (package)
chrome (package)
common (package)
edge (package)
firefox (package)
ie (package)
opera (package)
phantomjs (package)
remote (package)
safari (package)
support (package)
可以看出支持的浏览器还是比较丰富的,移动端到电脑端应由具有。
然而,个人觉得在写爬虫的时候,更推荐使用PhantomJS:
PhantomJS介绍:
(1)一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。
(2)提供JavaScript API接口,即通过编写Js程序可以直接与webkit内核交互,在此之上可以结合Java语言等,通过java调用js等相关操作,从而解决了以前c/c++才能比较好的基于webkit开发优质采集器的限制。
(3)提供windows、Linux、mac等不同os的安装使用包,也就是说可以在不同平台上二次开发采集项目或是自动项目测试等工作。
PhantomJS全面支持各种原生的Web标准:DOM处理、CSS选择器、JSON、Canvas和SVG。最重要的是他是一个没有GUI的程序,也就意味着他可以省去大量的加载图形界面的时间。有人曾经测试过,使用Selenium模块调用上述浏览器,PhantomJS的速度是第一名哦~~~~~第二和第三是chrome和ie。
PhantomJS的安装:
这里有一点要说明,PhantomJS并不是一个Python模块,他是一个独立的,第三方软件,这也就意味着我们不能简单的使用pip工具安装啦。
Mac下安装PhantomJS:
这里我们只要使用brew工具就能安装上PhantomJs了
brew install phantomjs
linux下安装PhantomJS:
linux下有很多第三方发型版本:比较常用的一般是 Ubuntu、centos等等。这些发行版也都有自己强大的软件管理仓库:apt、yum等等
那么安装起来也就超方便了:
# ubuntu
apt-get install phantomjs # centos
yum install phantomjs
win下安装PhantomJS:
虽然win下没有上述的方便的安装方式,但是我们可以去官网下载安装包,然后在安装,地址在这里:Download | PhantomJS
使用Selenium&PhantomJS抓取数据:
下面我们介绍一个简单到抓取百度的例子
from selenium import webdriver
#我们首先导入了Selenium里的webdriver,
browser = webdriver.PhantomJS()
#然后建立一个PhantomJS的浏览器对象,
url = 'https://www.baidu.com'
browser.get(url)
#最后我们通过get方法,打开了百度的首页。
browser.implicitly_wait(3)
这里要说一下 implicitly_wait():
浏览器解释JS脚本是需要时间的,但实际上这个时间并不好确定,如果我们手动设定时间间隔的话,设置多了浪费时间,设置少了又会丢失数据implictly_wait函数则完美解决了这个问题,给他一个时间参数,他会只能等待,当js完全解释完毕就会自动执行下一步。
找到搜索框和搜索按钮:
在第一步的时候,我们其实就已经把百度首页的数据爬到本地了,剩下当然是数据的筛选,这里推荐用Selenium自带函数来完成,Selenium 本身给出了相关函数来定位有效数据的位置。
# 找到第一个匹配的元素
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector # 一次查找多个元素 (这些方法会返回一个list列表):
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
相信之前学习了bs4和Xpath之后,用这个完全没有什么压力吧,看函数名就应该知道是具体通过什么来定位数据了。上面我们只是打开了百度而已,在使用真实浏览器的时候是不是要先在文本框里输入关键词然后在按搜索按钮呢?
在PhantomJS里我们也需要这样做:
text = browser.find_element_by_id('kw')
#首先调用find_element_by_id()方法找到了text栏的位置, text.clear() text.send_keys('python')
#然后通过send_keys()方法来输入关键字 print(browser.title)
#输出:百度一下,你就知道 button = browser.find_element_by_id('su')
#接着还是通过find_element_by_id()方法找到提按钮, button.submit()
#最后我们通过.submint()方法来模拟点击,发送搜索请求
用chrome开发者工具可以快速定位到各个element的位置:
筛选答案
results = browser.find_elements_by_class_name('t')
#通过browser.find_elements_by_class_name()方法定位到搜索结果,返回一个element类型的列表
#再通过element.text 和 element.get_attribute()方法来获取我们需要的数据。
for result in results:
print('标题:{} 超链接:{}'.format(result.text,result.find_element_by_tag_name('a').get_attribute('href')))
下面看一下运行结果
标题:Welcome to Python.org官网 超链接:http://www.baidu.com/link?url=nLxm0hnvH9HcezbpHRuDVS5BVAyuR91xzNhFE4Qy9_a
标题:Python_百度百科 超链接:http://www.baidu.com/link?url=jUTKRqQ91sf2liPtZlVHVr82UNuP12PPKdll2ZNQ9-kifb4GeLDG3SlV9NuCvI2BWUSqG8coNRzsYvlYusYuJK
标题:Download Python | Python.org 超链接:http://www.baidu.com/link?url=PP6oQw_LHvRmuc8wl4c-BFn_GouagfYU-IY0HqdUF88ikq5zriz1JNManttiFFuX
标题:Python教程 - 廖雪峰的官方网站 超链接:http://www.baidu.com/link?url=89Q6mTNkcq1NdeDubb3jgq0Du3OX8hUcNt90fyhJ6nMWXfAPyJUZ7Vg-b9CSpaxdpOxGErzWzASuq4E96mHnxlZsLi6wieiEqtEk8UsJqjnfeWfhrLz_lWrtuPkWjXAo
标题:Mac版 Python最新官方版下载_百度软件中心 超链接:http://www.baidu.com/link?url=xkHduP0KLXEL1jvFt2ftD8LXgRG0gBop2ojePLkZr5s7WvcBZ1nYxU2sPjedwQGabjC_v89VUoYuKSzy8aI-Ja
标题:python吧_百度贴吧 超链接:http://www.baidu.com/link?url=N5vRlEUf6OWIyclfhkWz5r38A-kUhT40K7VTNIwLdR3zwNF8hFKbtsQtaRbCa_p0uPPwFaKRgMN0zvgvTMm6rK
标题:玩蛇网 - Python教程学习与Python资源分享平台 超链接:http://www.baidu.com/link?url=0AK0LLSw35u5qIfXy7O9n3AcgWy8A4MaR55Ia2LyVQjmxivy_Q_UY_khKCWJp7iG
标题:Python教程_百度文库 超链接:http://www.baidu.com/link?url=okXMxRDGk1j6Ni5Il_hwNz8RC7C79XtAo76NptBIUF-GNvEKwpR-vKCAjY9DrBugt2pFZ87UiLlKcrhdgNsGjQwdLXbPc36ACgSok0PEKOq
标题:Python - 伯乐在线 超链接:http://www.baidu.com/link?url=kBa0MYj70CsPtPIpCikAxJJol_b_JHtSGD9iot7-hrX2eBNH_WW2r-PoaJf_nFhp
Selenium模拟浏览器初识的更多相关文章
- selenium模拟浏览器对搜狗微信文章进行爬取
在上一篇博客中使用redis所维护的代理池抓取微信文章,开始运行良好,之后运行时总是会报501错误,我用浏览器打开网页又能正常打开,调试了好多次都还是会出错,既然这种方法出错,那就用selenium模 ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...
- Selenium模拟浏览器抓取淘宝美食信息
前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...
- python下selenium模拟浏览器基础操作
1.安装及下载 selenium安装: pip install selenium 即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...
- 使用selenium模拟浏览器抓取淘宝信息
通过Selenium模拟浏览器抓取淘宝商品美食信息,并存储到MongoDB数据库中. from selenium import webdriver from selenium.common.excep ...
- python爬虫:使用Selenium模拟浏览器行为
前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...
- Python 配置 selenium 模拟浏览器环境,带下载链接
使用浏览器渲染引擎.直接用浏览器在显示网页时解析HTML,应用CSS样式并执行JavaScript的语句. 这方法在爬虫过程中会打开一个浏览器,加载该网页,自动操作浏览器浏览各个网页,顺便把数据抓下来 ...
- 16-使用Selenium模拟浏览器抓取淘宝商品美食信息
淘宝由于含有很多请求参数和加密参数,如果直接分析ajax会非常繁琐,selenium自动化测试工具可以驱动浏览器自动完成一些操作,如模拟点击.输入.下拉等,这样我们只需要关心操作而不需要关心后台发生了 ...
- Spider-Python爬虫之使用Selenium模拟浏览器行为
分析 他的代码比较简单,主要有以下的步骤:使用BeautifulSoup库,打开百度贴吧的首页地址,再解析得到id为new_list标签底下的img标签,最后将img标签的图片保存下来. header ...
随机推荐
- 杂项-DB:内存数据库
ylbtech-杂项-DB:内存数据库 内存数据库,顾名思义就是将数据放在内存中直接操作的数据库.相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的 ...
- 【POJ】2385 Apple Catching(dp)
Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13447 Accepted: 6549 D ...
- CentOS 7 创建桌面快捷方式
一,在桌面新建一个文件 文件名随意,但必须带有.desktop的后缀名, 以Eclipse为例 vi /home/lenmom/Desktop/eclipse.desktop 其中: lenmom 是 ...
- python写个Hack Scan
前言: 之前逛SAFEING极客社区的时候 发现一款黑市卖2000多的软件,后面下载了 打不开.发现config文件里面有些不错的东西.总结了一下 有了以下的脚本. 脚本用处: [1]探测CMS(不敢 ...
- Pathway富集分析气泡图
data.tsv > pathway = read.table("data.tsv",header = T, sep="\t") > library ...
- 编码转换(UTF8->GBK)
WCHAR woutstr[]; ]; , value, -, NULL, ); MultiByteToWideChar(CP_UTF8, , value, -, woutstr, len); len ...
- MonkeyScript测试命令集合
MonkeyScript:(不支持截屏) 可以被Monkey识别的集合命令 可以完成重复固定的操作 MonkeyRunner(支持截屏操作) 提供一系列API,可以完成模拟事件和截屏操作 Mo ...
- mac jmeter安装
1. 下载jmeter: 2. 通过cmd进入jmeter的bin目录: 3. 在cmd中输入:./jmeter.sh 4. 启动完成.
- vector array and normal stanard array
array 数组的长度固定 vector 自由存储区(栈),动态长度 普通标准数组相对较不安全,不方便; array,vector对象成员函数支持数组越界检测,同时代价是效率问题: array,普通标 ...
- rails 网站字体
方法1,在rubymine下查找所有css,scss,sass,less,修改所有带font-family的内容,删除public文件夹下面的缓存css,查看效果.如 body { backgroun ...