2.3 异常处理与浏览器伪装技术实战

“简说Python”,选择“置顶/星标公众号”

福利干货,第一时间送达!

2.3 异常处理与浏览器伪装技术实战_第1张图片

阅读本文大约6分钟,实战学习,老表建议你反复看,反复记,反复练。

//

本文作者

王豪行路难,多歧路,今安在,埋头苦改bug会有时,直到bug改完才吃饭

//

1.爬虫的异常处理实战

说明:爬虫在运行过程中会遇到很多异常,而通过异常处理可以使我们的爬虫变得健壮,不轻易崩溃。异常处理我们主要是通过URLErrorHTTPError这两个异常处理类来处理异常的。URLError只会返回异常原因HTTPError会返回异常状态码异常原因注意:HTTPErrorURLError的子类

  • 200 正常爬取

  • 301 Moved Permanently:重定向到新的URL,永久性

  • 302 Found:重定向到临时的URL,非永久性

  • 304 Not Modified:请求的资源未更新

  • 400 Bad Request:非法请求,设置了反爬技术

  • 401 Unauthrized:请求未经授权

  • 403 Forbidden:不允许访问那个资源

  • 500 Internal Server Error:服务器内部资源出故障了

  • 503 Service Unavailable:服务器不支持实现请求所需要的功能

eg:

import urllib.request
import urllib.error     #要导入该模块
#异常处理基本上都是下面这个模板
try:
    pass
except urllib.error.HTTPError as e:
    if hasattr(e, 'code'):
        print(e.code)
    if hasattr(e, 'reason'):
        print(e.reason)

2.浏览器伪装技术实战

说明:由于urlopen()对于一些高级功能不支持,很容易被网站发现是爬虫,而被禁止访问,导致爬取信息失败。这个时候,我们需要伪装成浏览器,再去爬取网页信息。urllib.request.build_opener()或者urllib.request.Request()下的add_header()来添加报头,实现浏览器的伪装技术。IP代理。即在你要爬取的网站页面按F12,点击network,然后随便点击要爬取网页上的随便一个连接,你会发现有很多连接显示出来,随便选一个点一下,然后找到Headers下面的User-Agent:User-Agent:后面的一串东西就是浏览器的IP代理。

2.3 异常处理与浏览器伪装技术实战_第2张图片 network

2.3 异常处理与浏览器伪装技术实战_第3张图片 在这里插入图片描述

(2)利用浏览器的代理 IP让爬虫伪装成浏览器
①用 urllib.request.build_opener()伪装
eg:
#导入urllib.request模块
import urllib.request
#要爬取的网站
url = "https://www.zhihu.com/"
#设置请求报头     头文件格式  headers = ("User-Agent", 用户具体代理值)
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.5558.400 QQBrowser/10.1.1695.400")
#创建一个opener
opener = urllib.request.build_opener()
#将headers添加到opener中
opener.addheaders = [headers]
#用opener.open()打开网页
data = opener.open(url).read().decode('utf-8')
print(len(data))

以上代码是用opener.open()直接打开网页,那么如何将opener安装成全局变量,从而方便我们的信息爬取?(因为我们爬取信息是用的urlopen()方法,如果不统一,会降低我们爬取信息的效率)urllib.request.install_opener(opener)方法将opener安装为全局,上面的代码可优化为:

#导入urllib.request模块
import urllib.request
#要爬取的网站
url = "https://www.zhihu.com/"
#设置请求报头     头文件格式  headers = ("User-Agent", 用户具体代理值)
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.5558.400 QQBrowser/10.1.1695.400")
#创建一个opener
opener = urllib.request.build_opener()
#将headers添加到opener中
opener.addheaders = [headers]
#将opener安装为全局
urllib.request.install_opener(opener)
#用urlopen()方法打开网页
data = urllib.request.urlopen(url).read().decode('utf-8')

浏览器伪装参考连接:https://www.jb51.net/article/139587.htm

我是老表,踏实的人更容易过好生活,本文完。

推荐阅读:

数据分析从零开始实战

仔细阅读下面四篇文章,快速掌握Python基础知识要点

完整Python基础知识

我是老表,支持我请转发分享本文


/你学Python的态度/

留言 Python666 或 我爱Python,表明你的学习态度。

点个在看,表明态度↓↓↓

你可能感兴趣的:(2.3 异常处理与浏览器伪装技术实战)