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 相关文章推荐
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
Python中获取对象信息的方法
Apr 27 Python
python制作一个桌面便签软件
Aug 09 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
Python操作mongodb的9个步骤
Jun 04 Python
python图像处理入门(一)
Apr 04 Python
利用python实现冒泡排序算法实例代码
Dec 01 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
Python日志syslog使用原理详解
Feb 18 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
python之openpyxl模块的安装和基本用法(excel管理)
Feb 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实现用户认证及管理完全源码
2007/03/11 PHP
认识并使用PHP超级全局变量
2010/01/26 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
php中的比较运算符详解
2013/10/28 PHP
linux中cd命令使用详解
2015/01/08 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
高三生物教学反思
2014/01/25 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
学校政风行风整改方案
2014/10/25 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
地球上的星星观后感
2015/06/02 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
关于 Python json中load和loads区别
2021/11/07 Python
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang