Python数据挖掘学习笔记(8)爬虫异常处理与浏览器伪装

一、爬虫异常处理 

      爬虫在运行的过程中,经常会遇到异常。若不进行异常处理,则爬虫程序会直接崩溃停止运行,当下次再次运行时,则又会重头开始。因此,开发一个具有顽强生命力的爬虫,必须要进行异常处理。

       常见的爬虫异常状态码:

       301 Moved Permanently:重定向到新的URL,永久性。
       302 Found:重定向到临时的URL,非永久性。
       304 Not Modified:请求的资源未更新。
       400 Bad Request:非法请求。
       401 Unauthorized:请求未经授权。
       403 Forbidden:禁止访问。
       404 Not Found:没有找到对应页面。
       500 Internal Server Error:服务器内部出现错误。
       501 Not Implemented:服务器不支持实现请求所需要的功能。

       常见的爬虫异常类型:主要为URLError与HTTPError类

       触发URLError的原因:
       1、连不上服务器
       2、远程URL不存在
       3、本地没有网络
       4、触发HTTPError子类

       二者的区别:

       HTTPError为URLError的子类,HTTPError有异常状态码与异常原因即code与reason属性,URLError没有异常状态码,所以,在处理的时候,不能使用URLError直接代替HTTPError。如果要代替,必须要判断是否有状态码属性,以下为正确使用URLError的实例代码:

import urllib.error
import urllib.request
try:
    urllib.request.urlopen("输入的网址")
except urllib.error.URLError  as e:
    if hasattr(e,"code"):
        print(e.code)
    if hasattr(e,"reason"):
        print(e.reason)

二、解决反爬机制的利器--浏览器伪装

      首先打开一个网页,按F12进入开发者选项,找到Network选项卡,然后刷新页面,找到一个js文件并点击,找到Headers,可以最终看到如下界面:

      页面中的User-Agent很重要,即用户的浏览器码,模拟浏览器的代码如下:

import urllib.request
#以博客网页为例
url="http://blog.csdn.net/Smart3S/article/details/82431464"
#从网页开发者选项中找到的浏览器码
headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6726.400 QQBrowser/10.2.2265.400")
opener=urllib.request.build_opener()
opener.addheaders=[headers]
data=opener.open(url).read()
fh=open("F:/233.html","wb")
fh.write(data)
fh.close()

       由于urlopen()对于一些HTTP的高级功能不支持,所以,如果要修改报头,可以使用urllib.request.build_opener()进行,当然,也可以使用urllib.request.Request()下的add_header()实现浏览器的模拟。

感谢韦玮老师的指导

猜你喜欢

转载自blog.csdn.net/Smart3S/article/details/82465127