js 爬虫抓取网页数据(网页爬虫工作时页面情况更加多样复杂(一)(组图))
优采云 发布时间: 2021-10-21 15:11js 爬虫抓取网页数据(网页爬虫工作时页面情况更加多样复杂(一)(组图))
基本身份验证是一种登录身份验证方法,用于允许 Web 浏览器和其他客户端程序在请求时以用户名和密码的形式提供身份凭据。将用BASE64算法加密的“username+colon+password”字符串放入httprequest中的headerAuthorization中并发送给服务器。在发明 cookie 之前,HTTP 基本身份验证是处理 网站 登录最常用的方法。目前,一些安全性较高的网站仍在使用这种方法。
例子
1、需求说明:访问某个网站(内部涉及,不对外公布)。
2、分析过程:在浏览器中输入网址,看到如下页面。这时候就需要输入用户名和密码来获取需要的数据。否则会返回401错误码,要求用户再次提供用户名和密码。另外,当使用fiddle抓取中间数据时,头部收录以下信息: 显然这是一个HTTP基本认证。
3、解决方案:这其实是一个post请求。与普通的post请求不同的是,每次请求数据时,都需要用BASE64对用户名和密码进行加密,并附加到请求头中。requests库提供了一个auth模块,专门用于处理HTTP认证,这样程序就不需要自己做加密处理了。具体代码如下:
知识点
http登录验证方式有很多种,其中应用最广泛的是基本验证和摘要验证。auth 模块还提供摘要验证处理方法。具体的使用方法我没有研究过。相关信息请咨询。
五、JavaScript 动态页面
前面介绍了静态页面和收录post表单网站的爬虫方法,比较简单。在实际做网络爬虫工作的时候,页面情况更加多样化和复杂。喜欢:
1、 网页收录javascript代码,需要渲染才能获取原创数据;
2、网站 具有一定的反爬虫能力。有的cookies是客户端脚本执行JS后才生成的,requests模块无法执行JS代码。如果我们按照操作的第三部分发布表单,您会发现缺少一些cookie,导致请求被拒绝。在目前众所周知的网站反爬虫工作做得很好,很难找到一个简单的帖子形式。
这种网站爬虫有什么好的解决办法吗?
“Python+硒+第三方浏览器”。
例子
1、说明:登录微软官网,自动下载微软最近发布的iso文件。
2、分析过程:
(1)我们在使用python请求库获取服务端源码时,发现python获取的源码与浏览器渲染的场景不一样,Python获取了JS源码。如下图:
Python有第三方库PyV8,可以执行JS代码,但是执行效率低。此外,微软官网还涉及到JS加密的cookies。如果使用requests+Pyv8+BeautifulSoup这三个库组合,代码会显得臃肿凌乱。.
还有其他更简洁易懂的方式吗?
是的,硒。
(2)“Selenium+第三方浏览器”,允许浏览器自动加载页面,浏览器执行JS获取需要的数据,这样我们的python代码就不需要实现浏览器客户端的功能了可以说,“Selenium+第三方浏览器”构成了一个强大的网络爬虫,可以处理cookies、javascript等页面的抓取,第三方浏览器分为有界面(chrome)和无界面(PhantomJS),而界面浏览器是可以直接看到浏览器打开和跳转的过程,非界面浏览器会将网站加载到内存中执行页面上的JS,不会有图形界面。您可以根据自己的喜好或需要选择第三方浏览设备。
3、解决方法:使用“selenium + chrome”来完成需求。
(1)下载安装python的selenium库;
(2)下载chromeDriver到本地;
(3)使用webdriver api完成页面的操作。下面以完成微软官网登录为例。示例代码在初始化webdriver时设置网络代理,指定浏览器下载文件保存路径, 并让 chrome 提示下载进度等信息。
知识点
实例化webdriver时,可以通过参数设置浏览器,比如设置网络代理,保存浏览器下载文件的路径。如果不传递参数,则默认继承本地浏览器设置。如果在浏览器启动时设置了属性,则使用 ChromeOption 类。具体信息请参考chromedriver官网。
“Python+selenium+第三方浏览器”可以处理多种抓取场景,包括静态页面、帖子表单、JS。应用场景非常强大。使用selenium来操作浏览器模拟点击,可以省去我们很多的后顾之忧。无需担心“隐藏字段”、cookie 跟踪等问题,但这种方法对于收录验证码的网页的操作来说并不好处理。主要难点在于图像识别。
六、总结
本文主要根据每个网站的特点提供了不同的爬取方式,可以应对大量场景下的数据爬取。在实际工作中,最常用的是“静态页面”和“javascript动态页面”。当然,如果页面收录验证码,则需要借助图像识别工具做一些事情。这种情况比较难处理,图像识别的准确率受图像内容的影响。
以下是一些个人总结。不知道大家有没有其他更好的方法?
如果你还有其他好的爬虫案例,欢迎在评论区留言,一起学习交流!