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绘制数据的瀑布图的教程
Apr 07 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 Python
浅析Python数据处理
May 02 Python
Python button选取本地图片并显示的实例
Jun 13 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
PyCharm Community安装与配置的详细教程
Nov 24 Python
Python selenium绕过webdriver监测执行javascript
Apr 12 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
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
php利用递归实现删除文件目录的方法
2016/09/23 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
Python标准库内置函数complex介绍
2014/11/25 Python
在Python的Django框架中更新数据库数据的方法
2015/07/17 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
Python 专题四 文件基础知识
2017/03/20 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
个人求职简历中英文自我评价
2013/12/16 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
写给医院的感谢信
2015/01/22 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
python中filter,map,reduce的作用
2022/06/10 Python
正则表达式基础与常用验证表达式
2022/06/16 Javascript