python如何爬取动态网站


Posted in Python onSeptember 09, 2020

python有许多库可以让我们很方便地编写网络爬虫,爬取某些页面,获得有价值的信息!但许多时候,爬虫取到的页面仅仅是一个静态的页面,即网页 的源代码,就像在浏览器上的“查看网页源代码”一样。一些动态的东西如javascript脚本执行后所产生的信息,是抓取不到的,这里暂且先给出这么一 些方案,可用于python爬取js执行后输出的信息。

1、两种基本的解决方案

1.1 用dryscrape库动态抓取页面

js脚本是通过浏览器来执行并返回信息的,所以,抓取js执行后的页面,一个最直接的方式就是用python模拟浏览器的行为。WebKit 是一个开源的浏览器引擎,python提供了许多库可以调用这个引擎,dryscrape便是其中之一,它调用webkit引擎来处理包含js等的网页!

import dryscrape
# 使用dryscrape库 动态抓取页面
def get_url_dynamic(url):
    session_req=dryscrape.Session()
    session_req.visit(url) #请求页面
    response=session_req.body() #网页的文本
    #print(response)
    return response
get_text_line(get_url_dynamic(url)) #将输出一条文本

这里对于其余包含js的网页也是适用的!虽然可以满足抓取动态页面的要求,但缺点还是很明显的:慢!太慢了,其实想一想也合理,python调用 webkit请求页面,而且等页面加载完,载入js文件,让js执行,将执行后的页面返回,慢一点也是应该的!除外还有很多库可以调用 webkit:PythonWebkit,PyWebKitGit,Pygt(可以用它写个浏览器),pyjamas等等,听说它们也可以实现相同的功能!

1.2 selenium web测试框架

selenium是一个web测试框架,它允许调用本地的浏览器引擎发送网页请求,所以,它同样可以实现抓取页面的要求。

# 使用 selenium webdriver 可行,但会实时打开浏览器窗口

def get_url_dynamic2(url):
    driver=webdriver.Firefox() #调用本地的火狐浏览器,Chrom 甚至 Ie 也可以的
    driver.get(url) #请求页面,会打开一个浏览器窗口
    html_text=driver.page_source
    driver.quit()
    #print html_text
    return html_text
get_text_line(get_url_dynamic2(url)) #将输出一条文本

这也不失为一条临时的解决方案!与selenium类似的框架还有一个windmill,感觉稍复杂一些,就不再赘述!

2、selenium的安装与使用

2.1 selenium的安装

在Ubuntu上安装可以直接使用pip install selenium。由于以下原因:

1. selenium 3.x开始,webdriver/firefox/webdriver.py的__init__中,executable_path="geckodriver";而2.x是executable_path="wires"

2. firefox 47以上版本,需要下载第三方driver,即geckodriver

还需要一些特殊操作:

1. 下载 geckodriverckod 地址: 

mozilla/geckodriver

2. 解压后将geckodriverckod 存放至 /usr/local/bin/ 路径下即可:

sudo mv ~/Downloads/geckodriver /usr/local/bin/

2.2 selenium的使用

1. 运行报错:

driver = webdriver.chrome()
TypeError: 'module' object is not callable

解决方案:浏览器的名称需要大写Chrome和Firefox,Ie

2. 通过

content = driver.find_element_by_class_name('content')

来定位元素时,该方法返回的是FirefoxWebElement,想要获取包含的值时,可以通过

value = content.text

到此这篇关于python如何爬取动态网站的文章就介绍到这了,更多相关python怎么爬动态网站内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
python对DICOM图像的读取方法详解
Jul 17 Python
关于python pyqt5安装失败问题的解决方法
Aug 08 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
Python判断两个对象相等的原理
Dec 12 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
keras模型可视化,层可视化及kernel可视化实例
Jan 24 Python
python如何处理程序无法打开
Jun 16 Python
使用OpenCV实现人脸图像卡通化的示例代码
Jan 15 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 Python
python如何停止递归
Sep 09 #Python
python能做哪些生活有趣的事情
Sep 09 #Python
Python 连接 MySQL 的几种方法
Sep 09 #Python
python实现AHP算法的方法实例(层次分析法)
Sep 09 #Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 #Python
Python列表推导式实现代码实例
Sep 09 #Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 #Python
You might like
curl实现站外采集的方法和技巧
2014/01/31 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
Yii学习总结之安装配置
2015/02/22 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
python实现决策树分类
2018/08/30 Python
python之拟合的实现
2019/07/19 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
办理退休介绍信
2014/01/09 职场文书
学生会主席事迹材料
2014/01/28 职场文书
小学教师师德反思
2014/02/03 职场文书
服装设计专业求职信
2014/06/16 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python