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基础教程之常用运算符
Aug 29 Python
Python中字典映射类型的学习教程
Aug 20 Python
详解python的数字类型变量与其方法
Nov 20 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
python如何生成网页验证码
Jul 28 Python
Python实现带下标索引的遍历操作示例
May 30 Python
Python中的self用法详解
Aug 06 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
用Python解数独的方法示例
Oct 24 Python
python代码xml转txt实例
Mar 10 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 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中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
代码生成器 document.write()
2007/04/15 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
深入理解JavaScript 参数按值传递
2017/05/24 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
2017/09/11 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
js实现每日签到功能
2018/11/29 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python中Class类用法实例分析
2015/11/12 Python
win10安装python3.6的常见问题
2020/07/01 Python
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
自我鉴定三原则
2014/01/13 职场文书
初中英语教学反思
2014/01/25 职场文书
给全校老师的建议书
2014/03/13 职场文书
师恩难忘教学反思
2014/04/27 职场文书
学习与创新自我评价
2015/03/09 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript