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随机数用法实例详解【基于random模块】
Apr 18 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
python利用正则表达式排除集合中字符的功能示例
Oct 10 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
pytorch中的卷积和池化计算方式详解
Jan 03 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
Python爬虫之爬取某文库文档数据
Apr 21 Python
Python学习之包与模块详解
Mar 19 Python
python前后端自定义分页器
Apr 13 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
php下删除字符串中HTML标签的函数
2008/08/27 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
php实现简易计算器
2020/08/28 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
angularjs实现猜大小功能
2017/10/23 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
基于Vue中的父子传值问题解决
2020/07/27 Javascript
python select.select模块通信全过程解析
2017/09/20 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
python tkinter窗口最大化的实现
2019/07/15 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
业务主管岗位职责
2013/11/20 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
专家推荐信模板
2014/05/09 职场文书
实习科室评语
2015/01/04 职场文书
长城导游词
2015/01/30 职场文书
家属联谊会致辞
2015/07/31 职场文书