七 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DVI和HDMI中的TMDS接口协议

TMDS(Transition Minimized Differential signal),即过渡调制差分信号,也被称为最小化传输差分信号,是指通过异或及异或非等逻辑算法将原始信号数据转换成10位,前8为数据由原始信号经运算后获得&#xff0c…

TMDS的信号通道

1 TMDS的信号通道: 1个HDMI包括3个TMDS数据通道和1个TMDS时钟通道。 . 每一个TMDS时钟周期内,TMDS数据通道上会发送一个10位的字符信息; . 每个TMDS时钟周期内,编码器将2位的控制数据、4位的报数据或者8位的视频数据采取不同 …

[luoguP2774] 方格取数问题(最大点权独立集)

传送门 引入两个概念: 最小点权覆盖集:满足每一条边的两个端点至少选一个的最小权点集。 最大点权独立集:满足每一条边的两个端点最多选一个的最大权点集。 现在对网格染色,使得相邻两点颜色不同,之后把两个颜色的点分…

光谱分布、光谱辐射通量密度与不同时间段分布光谱(图示)

1、光谱分布图 2 太阳辐射能量图 3、不同时间段的太阳分布光谱图 4、不同波长的光的能量分布主要区域 5、不同波段的使用场景

基于深度学习和传统算法的人体姿态估计,技术细节都讲清楚了

计算机视觉的一大研究热点是人体姿态估计,还有很多问题急需解决,比如遮挡,交互等等。在最近的CVPR2020里边也有很多这方面的工作。本文站长主要是想谈谈基于深度学习的实时多人姿态估计。 人体姿态估计要干嘛? 关于人类活动规律的…

杨浦区阜盛农民工子弟小学见闻

天气有些阴沉,起了个大早,一个小时奔波后来到了这里…… 大门口: 校领导: 有些破旧的校舍和阴沉的天空下祖国的希望: 同上,希望…… 期待的目光: 顽皮的笑脸,排着队也要调皮&#xf…

人体姿态估计算法之open pose

一,openpose是一种自底向上的算法: OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以Caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿态估计。适用于单人和多人&am…

抢火车票这个事吧,其实我也能做!(python黑科技)

2019独角兽企业重金招聘Python工程师标准>>> 又是一年,马上就要回家过年了,还没有买到票的小伙伴们是否已经像热锅上的蚂蚁了无脑的开始找黄牛了? 俗话说的好,求人不如求自己,抢票这玩意,其实我觉得我也可…

用 Python+openpose 实现抖音尬舞机

游戏开始后,随着音乐会给出不同的动作提示,用户按照提示摆出正确动作即可得分。援引官方说法,“尬舞机”主要应用了今日头条 AI Lab 自主开发的“人体关键点检测技术”,依靠这项技术,抖音能够检测到图像中所包含人体的…

Create a Service Catalog Request via REST API

http://wiki.servicenow.com/index.php?titleUseful_Catalog_Scripts#Eureka http://wiki.servicenow.com/index.php?titleService_Catalog_Script_API#gsc.tab0 Service Catalog APIhttps://docs.servicenow.com/bundle/istanbul-servicenow-platform/page/integrate/inboun…

解密昇腾AI处理器--Ascend310简介

Ascend310 AI处理器规格 Ascend310 AI处理器逻辑架构 昇腾AI处理器本质上是一个片上系统(System on Chip,SoC),主要可以应用在和图像、视频、语音、文字处理相关的应用场景。其主要的架构组成部件包括特制的计算单元、大容量的存储…

银盒子扫码下单在线订单开启商品售卖时段使用说明

1,登陆管理员账号,子账号下,配置管理--店铺配置--扫码下单Tab页,是否开启商品售卖时段,选择“是” 2,在商家后台登陆相应的子账号,在店铺管理--商品售卖时段里配置售卖时间以及相应时段售卖的商…

为什么早上和傍晚的太阳总是红色,而中午的大阳却是黄白色?

由太阳光本质决定,但会受环境影响。在地球上和火星上看到的太阳光也是有区别的,和太气层物质及厚薄也有关系。太阳光是由赤橙黄绿青蓝紫七色光组成的复合光是白色光。 在日出和日落的时候,地平线上所透过的大气层厚度,一般要比白…

java7

第八章 数组 1.数组的声明定义 数据类型[]变量名 new 数据类型[长度]; 列:int[]ary new int[5]; 2.取值,赋值 取值:数据名[下标]; 列:int a ary[1]; 赋值:变量数据名[…

串口波形分析

UART口发出数据按字节发送,发送数据8bit,实际量出波形为10bit,软件底层驱动会自动加上起始位和停止位各1bit,起始位为0,停止位为1。下图为用串口工具发送的数据和用示波器所量波形。 发送数据:0x34 0x43 示…

SpringBoot之MongoTemplate的查询可以怎么耍

学习一个新的数据库,一般怎么下手呢?基本的CURD没跑了,当可以熟练的增、删、改、查一个数据库时,可以说对这个数据库算是入门了,如果需要更进一步的话,就需要了解下数据库的特性,比如索引、事物…

LINQ to SQL 实现 GROUP BY、聚合、ORDER BY

前言 本示例主要实现 LINQ 查询,先分组,再聚合,最后在排序。示例很简单,但是使用 LINQ 却生成了不同的 SQL 实现。 1) 采用手动编写 SQL 实现 SELECT ROW_NUMBER() OVER(ORDER BY T.RealTotal DESC) AS SN, * FROM ( SELECT (S…

虚拟机增加内存方法

楼主由于要在虚拟机里面装一个oracle,在安装过程中,提示物理内存不符合最低标准,如图1. 图1 因为懒得新建一个虚拟机了,所以考虑给虚拟机新增磁盘空间。 首先说明,新增磁盘空间,必须保证当前虚拟机里每个新…

面对对象-封装

private 私有的 package/friendly/default 不写 protected 受保护的 public 公共的 那么什么情况该用什么修饰符呢?从作用域来看,public能够适用所有的情况。 但是大家在工作的时候,又不会真正全部都适用public,那么到底什么情况改用什么修饰…

本文详解5G是个什么鬼,程序员都准备好了吗?

无线移动通讯发展历史 最近5G的概念炒的如火如荼,为此,华为和高通还干了一仗。这篇文章从技术层面给大家分析,什么是5G,它和4G比,高级在哪里? 我们来看看移动互联网的技术发展: 然后我们在来看看…