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实现Windows上气泡提醒效果的方法
Jun 03 Python
Python检测网站链接是否已存在
Apr 07 Python
Python3使用requests发闪存的方法
May 11 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
Python 判断图像是否读取成功的方法
Jan 26 Python
python print出共轭复数的方法详解
Jun 25 Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 Python
基于Pytorch SSD模型分析
Feb 18 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
python实现简单石头剪刀布游戏
Oct 24 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 for PHP简单表数据查询实例
2007/01/02 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
计算php页面运行时间的函数介绍
2013/07/01 PHP
php生成gif动画的方法
2015/11/05 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Python 跨.py文件调用自定义函数说明
2020/06/01 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
网络维护中文求职信
2014/01/03 职场文书
小学生演讲稿
2014/01/12 职场文书
餐饮采购员岗位职责
2014/03/15 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
小学生安全保证书
2015/05/09 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
canvas 中如何实现物体的框选
2022/08/05 Javascript