一般我们使用python的第三方库requests及框架scrapy来爬取网上的资源,但是设计javascript渲染的页面却不能抓取,此时,我们使用web自动化测试化工具Selenium+无界面浏览器PhantomJS来抓取javascript渲染的页面,下面实现一个简单的爬取

环境搭建

准备工具:python3.5,selenium,phantomjs

我的电脑里面已经装好了python3.5

安装Selenium

pip3 install selenium

安装Phantomjs  

按照系统环境下载phantomjs,下载完成之后,将phantomjs.exe解压到python的script文件夹下

使用selenium+phantomjs实现简单爬虫

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()

selenium+phantomjs的一些使用方法

设置请求头里的user-Agent

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities dcap = dict(DesiredCapabilities.PHANTOMJS) #设置useragent
dcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ') #根据需要设置具体的浏览器信息
driver = webdriver.PhantomJS(desired_capabilities=dcap) #封装浏览器信息
driver.get('http://www.baidu.com') #加载网页
data = driver.page_source #获取网页文本
driver.save_screenshot('1.png') #截图保存
print(data)
driver.quit()

请求超时设置

webdriver类中有三个和时间相关的方法:

1.pageLoadTimeout    设置页面完全加载的超时时间,完全加载即完全渲染完成,同步和异步脚本都执行完

2.setScriptTimeout    设置异步脚本的超时时间

3.implicitlyWait         识别对象的智能等待时间

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5) #设置超时时间
driver.get('http://www.baidu.com')
print(driver.title)
driver.quit()

设置浏览器窗口大小

调用启动的浏览器不是全屏的,有时候会影响我们的某些操作,所以我们可以设置全屏

driver.maximize_window()  #设置全屏
driver.set_window_size('480','800') #设置浏览器宽480,高800  

元素定位

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5)
driver.get('http://www.baidu.com')
try:
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw') # 通过ID定位
driver.find_element_by_class_name('s_ipt') # 通过class属性定位
driver.find_element_by_name('wd') # 通过标签name属性定位
driver.find_element_by_tag_name('input') # 通过标签属性定位
driver.find_element_by_css_selector('#kw') # 通过css方式定位
driver.find_element_by_xpath("//input[@id='kw']") # 通过xpath方式定位
driver.find_element_by_link_text("贴吧") # 通过xpath方式定位
print(driver.find_element_by_id('kw').tag_name ) # 获取标签的类型
except Exception as e:
print(e)
driver.quit()

操作浏览器前进或后退

from selenium import webdriver
driver = webdriver.PhantomJS()
try:
driver.get('http://www.baidu.com') #访问百度首页
driver.save_screenshot('1.png')
driver.get('http://www.sina.com.cn') #访问新浪首页
driver.save_screenshot('2.png')
driver.back() #回退到百度首页
driver.save_screenshot('3.png')
driver.forward() #前进到新浪首页
driver.save_screenshot('4.png')
except Exception as e:
print(e)
driver.quit()

python+selenium+PhantomJS爬取网页动态加载内容的更多相关文章

  1. Python爬虫学习——使用selenium和phantomjs爬取js动态加载的网页

    1.安装selenium pip install selenium Collecting selenium Downloading selenium-3.4.1-py2.py3-none-any.wh ...

  2. Python网络爬虫_爬取Ajax动态加载和翻页时url不变的网页

    1 . 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新 ...

  3. 看我怎么扒掉CSDN首页的底裤(python selenium+phantomjs爬取CSDN首页内容)

    这里只是学习一下动态加载页面内容的抓取,并不适用于所有的页面. 使用到的工具就是python selenium和phantomjs,另外调试的时候还用了firefox的geckodriver.exe. ...

  4. 爬虫——爬取Ajax动态加载网页

    常见的反爬机制及处理方式 1.Headers反爬虫 :Cookie.Referer.User-Agent 解决方案: 通过F12获取headers,传给requests.get()方法 2.IP限制 ...

  5. Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页

    Python3.x:Selenium+PhantomJS爬取带Ajax.Js的网页 前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但 ...

  6. 爬虫开发6.selenuim和phantonJs处理网页动态加载数据的爬取

    selenuim和phantonJs处理网页动态加载数据的爬取阅读量: 1203 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/ ...

  7. (五)selenuim和phantonJs处理网页动态加载数据的爬取

    selenuim和phantonJs处理网页动态加载数据的爬取 一 图片懒加载 自己理解------就是在打开一个页面的时候,图片数量特别多,图片加载会增加服务器的压力,所以我们在这个时候,就会用到- ...

  8. Scrapy 框架 使用 selenium 爬取动态加载内容

    使用 selenium 爬取动态加载内容 开启中间件 DOWNLOADER_MIDDLEWARES = { 'wangyiPro.middlewares.WangyiproDownloaderMidd ...

  9. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

随机推荐

  1. homebrew 更改镜像,进行成功安装

    在mac系统中,使用homebrew可以很方便的管理包.按照官网的说明执行以下命令时总是报错: /usr/bin/ruby -e "$(curl -fsSL https://raw.gith ...

  2. python之找最后一个人

    题目大概是:有10个人围成一圈,从第一个人数,数到3的人出局,问最后一个人是谁? 围成一圈,那就是无限循环,直至最后一个人,我们可以把10个人看做一个列表,每循环一次就把除3为0的数去除,下次再次循环 ...

  3. Xamarin.Android ImageView 图片圆角显示

    第一步:在 values 文件夹下新增 Attrs.xml 文件 <?xml version="1.0" encoding="utf-8" ?> & ...

  4. 全能系统监控工具dstat

    一.什么是dstat? 通过man帮助,可以看到官方对dstat的定义为:多功能系统资源统计生成工具( versatile tool for generating system resource st ...

  5. css的direction属性

    在项目中有遇到一个问题,select元素中的文字需要右对齐.text-align是无效的,想了很久都没有想到办法.经过一翻搜索之后发现了https://stackoverflow.com/questi ...

  6. DNS服务器的搭建

    更详细的dns笔记整理: http://services.linuxpanda.tech/DNS/index.html 1 DNS介绍 DNS(Domain Name System,域名系统),因特网 ...

  7. PHP中的__set和__get方法

    当调用或者设置类不存在的方法时,_会调用_set和__get方法 以下是示例 <?php class HandsonBoy { private $name = 'chenqionghe'; pr ...

  8. 翻译:replace into语句(已提交到MariaDB官方手册)

    本文为mariadb官方手册:REPLACE INTO的译文. 原文:https://mariadb.com/kb/en/replace/ 我提交到MariaDB官方手册的译文:https://mar ...

  9. tiny210 tslib 测试(基于 ft5x06 触摸屏),解决触摸无效问题

    1. 拷贝至开发板 将上次实验中的 tmp 文件夹拷贝到开发板,可以通过 nfs 来传输,并将 tmp/lib 下的所有 .so 文件拷贝至 开发板的 /usr/lib 中,并且确保库的映射关系正确. ...

  10. 分布式系统监视zabbix讲解十之监控tomcat--技术流ken

    前言 在Zabbix中,JMX监控数据的获取由专门的代理程序来实现,即Zabbix-Java-Gateway来负责数据的采集,Zabbix-Java-Gateway和JMX的Java程序之间通信获取数 ...