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的Django框架下管理站点的基本方法
Jul 17 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
Python中的元组介绍
Jan 28 Python
python写日志文件操作类与应用示例
Jul 01 Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
python 密码学示例——凯撒密码的实现
Sep 21 Python
pip install命令安装扩展库整理
Mar 02 Python
详解pytorch创建tensor函数
Mar 22 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 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
web方式ftp
2006/10/09 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
PHP内置加密函数详解
2016/11/20 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
js导出txt示例代码
2014/01/14 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
windows下Python安装、使用教程和Notepad++的使用教程
2019/10/06 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
Python如何定义有默认参数的函数
2020/08/10 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
企业与个人合作经营协议书
2014/11/01 职场文书
大学生党课感想
2015/08/11 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby