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 相关文章推荐
windows下安装python paramiko模块的代码
Feb 10 Python
Python实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
python简易远程控制单线程版
Jun 20 Python
Django实战之用户认证(初始配置)
Jul 16 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
Python selenium的基本使用方法分析
Dec 21 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
基于python实现计算两组数据P值
Jul 10 Python
DRF框架API版本管理实现方法解析
Aug 21 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
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
php懒人函数 自动添加数据
2011/06/28 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
JavaScript-RegExp对象只能使用一次问题解决方法
2014/06/23 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
JS中的forEach、$.each、map方法推荐
2016/04/05 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
详解VUE 数组更新
2017/12/16 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
flask中的wtforms使用方法
2018/07/21 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
会计专业求职信范文
2014/03/16 职场文书
党课心得体会范文
2014/09/09 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
单位租车协议书
2015/01/29 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
Python开发简易五子棋小游戏
2022/05/02 Python