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实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
详解python的ORM中Pony用法
Feb 09 Python
python实现简单http服务器功能
Sep 17 Python
解析Python的缩进规则的使用
Jan 16 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
Jul 01 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
Python求正态分布曲线下面积实例
Nov 20 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
使用python实现多维数据降维操作
Feb 24 Python
Python3.8安装Pygame教程步骤详解
Aug 14 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 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
php4的彩蛋
2006/10/09 PHP
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
JS查看对象功能代码
2008/04/25 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
销售员求职个人的自我评价
2014/02/19 职场文书
内勤主管岗位职责
2014/04/03 职场文书
《画家乡》教学反思
2014/04/22 职场文书
国际会计专业求职信
2014/08/04 职场文书
教师党员个人自我剖析材料
2014/09/29 职场文书
单位租房协议范本
2014/12/03 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL