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中执行shell命令的几个方法小结
Sep 18 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
解读! Python在人工智能中的作用
Nov 14 Python
Python3中条件控制、循环与函数的简易教程
Nov 21 Python
python3调用R的示例代码
Feb 23 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
python3使用flask编写注册post接口的方法
Dec 28 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
python初步实现word2vec操作
Jun 09 Python
Django nginx配置实现过程详解
Sep 10 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 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
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
js实现蒙版效果
2020/01/11 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
python每隔N秒运行指定函数的方法
2015/03/16 Python
Python中常用信号signal类型实例
2018/01/25 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
详解python 内存优化
2020/08/17 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
学校后勤人员职责
2013/12/27 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
汇报材料怎么写
2014/12/30 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
党员承诺书范文2015
2015/04/27 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python