七 web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理...
如果爬虫没有异常处理,那么爬行中一旦出现错误,程序将崩溃停止工作,有异常处理即使出现错误也能继续执行下去
1.常见状态吗
301:重定向到新的URL,永久性
302:重定向到临时URL,非永久性
304:请求的资源未更新
400:非法请求
401:请求未经授权
403:禁止访问
404:没找到对应页面
500:服务器内部出现错误
501:服务器不支持实现请求所需要的功能
2.异常处理
URLError捕获异常信息
#!/usr/bin/env python # -*- coding: utf-8 -*-import urllib.request import urllib.errortry: #尝试执行里面的内容html = urllib.request.urlopen('http://www.xiaohuar.com/').read().decode("utf-8")print(html)except urllib.error.URLError as e: #如果出现错误if hasattr(e,"code"): #如果有错误代码print(e.code) #打印错误代码if hasattr(e,"reason"): #如果有错误信息print(e.reason) #打印错误信息#返回 说明网站禁止了爬虫访问 # 403 # Forbidden
浏览器伪装技术
很多网站,做了反爬技术,一般在后台检测请求头信息里是否有User-Agent浏览器信息,如果没有说明不是浏览器访问,就屏蔽了这次请求
所以,我们需要伪装浏览器报头来请求
#!/usr/bin/env python # -*- coding: utf-8 -*-import urllib.request url = 'https://www.qiushibaike.com/' #抓取页面URL tou = ('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0') #设置模拟浏览器报头 b_tou = urllib.request.build_opener() #创建请求对象 b_tou.addheaders=[tou] #添加报头 html = b_tou.open(url).read().decode("utf-8") #开始抓取页面 print(html)
注意:我们可以看到这次请求并不是用urlopen()方法请求的,此时用urlopen()无法请求,但是我们就会感觉到这样很费劲,难道每次请求都要创建build_opener(),所以我们需要设置使用urlopen()方法请求自动报头
设置使用urlopen()方法请求自动报头,也就是设置用户代理
install_opener()将报头信息设置为全局,urlopen()方法请求时也会自动添加报头
#!/usr/bin/env python # -*- coding: utf-8 -*-import urllib.request #设置报头信息 tou = ('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0') #设置模拟浏览器报头 b_tou = urllib.request.build_opener() #创建请求对象 b_tou.addheaders=[tou] #添加报头到请求对象 #将报头信息设置为全局,urlopen()方法请求时也会自动添加报头 urllib.request.install_opener(b_tou)#请求 url = 'https://www.qiushibaike.com/' html = urllib.request.urlopen(url).read().decode("utf-8") print(html)
创建用户代理池
#!/usr/bin/env python # -*- coding: utf-8 -*-import urllib.request import random #引入随机模块文件def yh_dl(): #创建用户代理池yhdl = ['Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0','Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)','Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1','Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1','Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11','Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)','Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5','User-Agent:Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5','Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5','Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1','Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10','Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13','Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+','Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)','UCWEB7.0.2.37/28/999','NOKIA5700/ UCWEB7.0.2.37/28/999','Openwave/ UCWEB7.0.2.37/28/999','Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999']thisua = random.choice(yhdl) #随机获取代理信息headers = ("User-Agent",thisua) #拼接报头信息opener = urllib.request.build_opener() #创建请求对象opener.addheaders=[headers] #添加报头到请求对象urllib.request.install_opener(opener) #将报头信息设置为全局,urlopen()方法请求时也会自动添加报头#请求 yh_dl() #执行用户代理池函数 url = 'https://www.qiushibaike.com/' html = urllib.request.urlopen(url).read().decode("utf-8") print(html)
这样爬虫会随机调用,用户代理,也就是随机报头,保证每次报头信息不一样
转载于:https://www.cnblogs.com/meng-wei-zhi/p/8182538.html
七 web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理...相关推荐
- python爬虫网络请求超时_6、web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求...
利用python系统自带的urllib库写简单爬虫 urlopen()获取一个URL的html源码 read()读出html源码内容 decode("utf-8")将字节转化成字符 ...
- 八 web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用
使用IP代理 ProxyHandler()格式化IP,第一个参数,请求目标可能是http或者https,对应设置 build_opener()初始化IP install_opener()将代理IP设置 ...
- 九 web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解...
封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import j ...
- 爬虫入门之urllib库详解(二)
爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...
- Crawler:反爬虫之基于urllib库+伪装浏览器方式实现从各种网站上(以百度贴吧为例)获得你喜欢的照片下载到本地电脑上
Crawler:反爬虫之基于urllib库+伪装浏览器方式实现从各种网站上(以百度贴吧为例)获得你喜欢的照片下载到本地电脑上 目录 输出结果 实现代码 输出结果 后期更新-- 实现代码 import ...
- 四、爬虫中的urllib库使用
这篇介绍如何使用爬虫中的urllib库 小试牛刀 怎样扒网页呢? 其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HT ...
- Python 爬虫浏览器伪装技术
浏览器伪装技术实战 1 网站常见的反爬虫和应对方法 一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式. 前两种比较容易遇到,大多数网站都从这些角度来反爬虫.第三种一 ...
- 爬虫笔记(十二)——浏览器伪装技术
为什么要进行浏览器伪装技术? 有一些网站为了避免爬虫的恶意访问,会设置一些反爬虫机制,对方服务器会对爬虫进行屏蔽.常见的饭爬虫机制主要有下面几个: 1. 通过分析用户请求的Headers信息进行反爬 ...
- 爬虫笔记:Urllib库详解
如果不懂爬虫,请看链接 爬虫第一课:爬虫的基本原理 什么是Urllib Urllib是python 内置的http的请求库.包含四个模块 urllib.request 请求模块 urllib.erro ...
最新文章
- CVPR2020 | 真实场景中的玻璃检测,有趣的应用
- 摆线减速器原理、减速比、设计方法
- navicat 连接 mogodb 报错 requires authentication
- Mysql 於lampp xampp LinuxUbuntu下的配置
- Android接口和框架学习
- Livemesh文件同步功能--使用图解
- java遇上html,JAVA遇见HTML——JSP篇:JSP内置对象(上)
- 转载 电子商务关键数字优化(线上部分,中)
- 看jQuery源码的技巧
- 【能量检测】基于认知无线电的能量检测算法的matlab仿真
- 数字经济发展指标体系和测算(含互联网宽带、电话普及率等多指标 内附原始数据) 2011-2020年
- 其实就是为了能有字幕特效,用MeGUI + AVS压制PSP MP4AVC视频03 - 实战简单转换篇...
- 推荐玩游戏的计算机及型号,想买个3000左右的台式电脑,主要玩游戏,求推荐品牌还有型号。...
- R语言程序包下载地址:CRAN Packages
- 數據移動時發生***識別欄位其外顯值只有當使用了資料行清單且 IDENTITY_INSERT 為 ON 時才能指定...
- 【CSDN】文章撰写方法
- 【摄影教程】拍出酷照有什么摄影技…
- 开源复杂网络分析软件中社团发现算法总结
- iOS 调用打印机
- 分享ricequant量化交易接口是如何执行交易功能?
热门文章
- Bash Shell学习笔记五
- ROS Kinectic 安装问题
- CSDN-Markdown编辑器如何修改图像大小
- 奇异值值分解。svd_推荐系统-奇异值分解(SVD)和截断SVD
- gan神经网络_神经联觉:当艺术遇见GAN
- 在Ubuntu上创建并测试GRE tunnel
- python3.5安装pygame_python怎么安装pygame
- python3 for_python3 for循环-range遍历
- Unity SRP自定义渲染管线 -- 2.Custom Shaders
- Please provide an auth token with USYM_UPLOAD_AUTH_TOKEN environment Unity Mac 命令行出包报错