IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python爬虫从入门到精通(五)动态网页的挑战 -> 正文阅读

[Python知识库]Python爬虫从入门到精通(五)动态网页的挑战

目录

前言

一、动态网页的使用场景

二、回到与HTTP服务器发送请求数据的原始方法

1、GET方法

2、 POST方法

三、更加难以对付的动态网站

1、应对需要多次数据的交互模拟的网站

2、 Selenium

3、 PhantomJS及浏览器

四、关于动态网站信息抓取的总结


v搜索公众号:zhulin1028
后台回复:【Python1】【Python2】【Python3】【Python全栈】【爬虫】
免费获取对应资料。
欢迎技术交流,加我V:ZL3132537525

前言

很多网站的数据,比如电商网站商品的价格,评论等等会采用动态加载的方式来加载,这样可能在爬虫程序刚刚访问时无法直接获取到相关数据。那么怎么应对这样的问题呢?

一、动态网页的使用场景

先看下面一个例子:

??

??????? 这是京东上看一本书的场景。我们发现打开一本书之后,书的价格,排名等信息及书的评论信息不是在我们第一次打开网站时就立即加载进来的。而是通过二次请求或多次的异步请求获取的。这样的页面就是动态页面。

关于动态页面使用的场景:

???????? 希望异步刷新的场景。有些网页内容很多,一次加载完对服务器压力很大,而且有的用户不会去查看所有内容;

二、回到与HTTP服务器发送请求数据的原始方法

1、GET方法

GET把参数数据队列添加到URL中,Key和Value的各个字段一一对应;在URL中可以看到。

浏览器的URL中有些符号,字符不能被很好的识别。那么我们需要有一套编码的方式来传递信息。所以发送端需要做urlencode; 接收端需要做urldecode;

https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python%20%E7%88%AC%E8%99%AB&oq=python%2520%25E7%2588%25AC%25E8%2599%25AB&rsv_pq=ef9e51560000eca9&rsv_t=db33UmQaiVre2ourDQMjsxtS03DJVCOUAc2AHonGCIhHT2or8zim%2F96kVGA&rqlang=cn&rsv_enter=0&prefixsug=python%2520%25E7%2588%25AC%25E8%2599%25AB&rsp=0&rsv_sug=2

在线测试工具: http://tool.chinaz.com/tools/urlencode.aspx

1.https://www.baidu.com/s?wd=DNS

?xxx=yyy&time=zzz get 请求的标识

2.http://acb.com/login?name=zhangsan&password=123

login: name=zhangsan? password=123

2、 POST方法

通过一个例子来看POST方法的使用:

?这是有道翻译的页面,仔细观察会发现,当用户每次输入一个想要翻译的词语时,页面的URL信息并不发生任何改变。这是一个典型的异步使用Ajax的技术,用JSON格式进行数据的传递。

三、更加难以对付的动态网站

1、应对需要多次数据的交互模拟的网站

我们有时会遇到像淘宝这样的大型网站,对数据版权看得特别重的,它们的网站有大量的工程师和技术人员去维护,它们也可能在技术手段上采用多次交互数据包的方式来完成网站服务器与用户浏览器之间的交互。如果此时还采用传统的分析数据包的方式会比较的复杂,难度较高。那么,有没有一劳永逸的方法,来解决此类问题呢?

我们的解决方案是:Selenium + PhantomJS。

???? 我们的爬虫其实就是在做模拟浏览器的行为。

2、 Selenium

一个Web自动化测试工具,最初是为了网站自动化测试而开发的;我们玩游戏有按键精灵;Selenium也可以做类似的事情,但是它是在浏览器中做这样的事情。

安装: sudo pip install selenium(pip install selenium)

在Python中 from selenium import webdriver 来测试是否装好

说明:想要用Python做自动化测试的童鞋们可以好好研究一下Selenium的使用。

3、 PhantomJS及浏览器

说明:我们上课用的时有界面的Firefox浏览器,以便于教学;

一个基于webkit无界面(headless)的浏览器,它可以把网站加载到内存中并执行页面上的JS,但它没有图形用户界面,所以耗费的资源比较少;

安装:???? sudo apt install phantomjs (此方法可能安装不完整,导致部分功能无法使用)

Linux Ubuntu下完全安装的方法(参看http://blog.csdn.net/m0_38124502/article/details/79276499

)

Wget

https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2

?cd 下载

?tar -xvf phantomjs-2.1.1-linux-x86_64.tar.bz2

?cd phantomjs-2.1.1-linux-x86_64/

?cd bin/

?sudo cp phantomjs /usr/bin

python -启动-> 浏览器进程phantomjs,

测试:

SpiderCodes\Phantomjs\..? 对其中的例子helloworld.js, pageload.js

进行测试;

注意:?? ****有可能造成资源泄漏;为了避免这种事的发生,需要有个策略适当的时候去kill phantomjs进程。

四、关于动态网站信息抓取的总结

总的来说,我们的爬虫要尽量模拟的看起来就像是真正的用户在浏览器上访问服务器网站的行为。如果我们使用GET或POST的方式来模拟浏览器与服务器间通信的行为,成本比较低,但是应对复杂的网站或者服务器精心防御的网站来说是很难骗过服务器的。Selenim+PhantomJS的方案则会让我们的程序看起来更像是普通的用户,但是它的效率相对而言会降低很多,速度也会慢很多。在大规模爬去数据时可能遇到许多新的挑战。(比如网站尺寸的设置,等待时间的设定等)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:01:17  更:2021-12-10 11:01:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 4:49:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码