Python爬虫之处理带Ajax、Js的网页
2017-12-08 13:28
603 查看
Python爬虫之处理带Ajax、Js的网页
现在很多网站的都大量使用JavaScript,或者使用了Ajax技术。这样在网页加载完成后,url虽然不改变但是网页的DOM元素内容却可以动态的变化。如果处理这种网页是还用requests库或者python自带的urllib库那么得到的网页内容和网页在浏览器中显示的内容是不一致的。那么我们这样就采集不到想要的结果。为了解决这个问题,可以使用Selenium+PhantomJS。这两个组合在一起,可以运行非常强大的爬虫,可以处理cookie,JavaScript,header以及其他你想做的任何事情。
Selenium是一个强大的网络数据采集工具,最初是为网站自动化测试开发的,其有对应的Python库,可以通过命令
pip install selenium进行安装。
PhantomJS是一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。通过编写js程序可以直接与webkit内核交互,在此之上可以结合java语言等,通过java调用js等相关操作。需要去官网下载对应平台的压缩文件,Linux下直接解压即可使用。
下面是通过这两者来解决客户端重定向问题的例子:
from selenium import webdriver import time from selenium.webdriver.remote.webelement import WebElement from selenium.common.exceptions import StaleElementReferenceException # 处理重定向,可以定时检查页面的某元素 # 如果和先前的不一致则可认为客户端重定向 def wait_for_load(driver): #elem = driver.find_element_by_tag_name("html") title = driver.find_element_by_tag_name("title") #print(title) count = 0 while True: count += 1 if count > 20: print("Timing out after 10 seconds and returning") return time.sleep(.5) newtitle = driver.find_element_by_tag_name("title") if newtitle != title: return #try: # elem = driver.find_element_by_tag_name("html") #except StaleElementReferenceException: # return driver = webdriver.PhantomJS(executable_path='./phantomjs') driver.get("http://pythonscraping.com/pages/javascript/redirectDemo1.html") wait_for_load(driver) print(driver.page_source)
phantomjs文件和该程序文件在同级目录下。程序首先加载了driver对象,然后请求网站,之后没0.5秒检测网站的html元素,如果html元素发生改变则认为页面发生了重定向,然后打印重定向后的页面内容。
相关文章推荐
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 - 数客
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器库
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 非常全面到位的介绍与源代码地址 :Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 爬虫修养-处理动态网页
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- python-框架-网页爬虫-文本处理-科学计算-可视化-机器学习-数据挖掘-深度学习
- Python 网页爬虫、 文本处理、 科学计算 、机器学习、数据挖掘 兵器谱
- python --网页爬虫,文本处理,科学计算,机器学习,数据挖掘资料+附带工具包下载
- python爬虫(爬取蜂鸟网高像素图片)_空网页,错误处理
- python --网页爬虫,文本处理,科学计算,机器学习,数据挖掘资料+附带工具包下载+tensorflow
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 【Python爬虫5】提取JS动态网页数据
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱