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中使用SimpleParse模块进行解析的教程
Apr 11 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
python频繁写入文件时提速的方法
Jun 26 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
python中Lambda表达式详解
Nov 20 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 Python
pandas实现导出数据的四种方式
Dec 13 Python
python实现会员信息管理系统(List)
Mar 18 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报表之jpgraph柱状图实例代码
2011/08/22 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
php事件驱动化设计详解
2016/11/10 PHP
JS隐藏参数post传值实例
2013/04/18 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
Python实现测试磁盘性能的方法
2015/03/12 Python
Python使用pymysql小技巧
2017/06/04 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
python 类之间的参数传递方式
2019/12/20 Python
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
瑞士最大的图书贸易公司:Orell Füssli
2019/12/28 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
企业行政文员岗位职责
2013/12/03 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
车间核算员岗位职责
2014/07/01 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
圣诞晚会主持词
2015/07/01 职场文书
辞职离别感言
2015/08/04 职场文书
Python torch.flatten()函数案例详解
2021/08/30 Python