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的shutil模块中文件的复制操作函数详解
Jul 05 Python
详解python的几种标准输出重定向方式
Aug 15 Python
使用python和pygame绘制繁花曲线的方法
Feb 24 Python
让代码变得更易维护的7个Python库
Oct 09 Python
Python检查ping终端的方法
Jan 26 Python
深入浅析python 协程与go协程的区别
May 09 Python
Python读写文件基础知识点
Jun 10 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 Python
python爬虫基础之urllib的使用
Dec 31 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下MAIL的另一解决方案
2006/10/09 PHP
php日历[测试通过]
2008/03/27 PHP
php全排列递归算法代码
2012/10/09 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
想学画画?python满足你!
2020/12/24 Python
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
篮球赛口号
2014/06/18 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
客户经理岗位职责
2015/01/31 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
无故旷工检讨书
2015/08/15 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
python热力图实现的完整实例
2022/06/25 Python