Python爬虫headers处理及网络超时问题解决方案


Posted in Python onJune 19, 2020

1、请求headers处理

我们有时请求服务器时,无论get或post请求,会出现403错误,这是因为服务器拒绝了你的访问,这时我们可以通过模拟浏览器的头部信息进行访问,这样就可以解决反爬设置的问题。

import requests
# 创建需要爬取网页的地址
url = 'https://www.baidu.com/'   
# 创建头部信息
headers = {'User-Agent':'OW64; rv:59.0) Gecko/20100101 Firefox/59.0'}
# 发送网络请求
response = requests.get(url, headers=headers)  
# 以字节流形式打印网页源码
print(response.content)

结果:

b'<!DOCTYPE html><!--STATUS OK-->\n\n\n  \n  \n              <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#2932e1"><meta name="description" content="\xe5\x85\xa8\xe7\x90\x83\xe6\x9c\x80\xe5\xa4\xa7\xe7\x9a\x84\xe4\xb8\xad\xe6\x96\x87\xe6\x90\x9c\xe7\xb4\xa2\xe5\xbc\x95\xe6\x93\x8e\xe3\x80\x81\xe8\x87\xb4\xe5\x8a\x9b\xe4\xba\x8e\xe8\xae\xa9\xe7\xbd\x91\xe6\xb0\x91\xe6\x9b\xb4\xe4\xbe\xbf\xe6\x8d\xb7\xe5\x9c\xb0\xe8\x8e\xb7\xe5\x8f\x96\xe4\xbf\xa1\xe6\x81\xaf\xef\xbc\x8c\xe6\x89\xbe\xe5\x88\xb0\xe6\x89\x80\xe6\xb1\x82\xe3\x80\x82\xe7\x99\xbe\xe5\xba\xa6\xe8\xb6\x85\xe8\xbf\x87\xe5\x8d\x83\xe4\xba\xbf\xe7\x9a\x84\xe4\xb8\xad\xe6\x96\x87\xe7\xbd\x91\xe9\xa1\xb5\xe6\x95\xb0\xe6\x8d\xae\xe5\xba\x93\xef\xbc\x8c\xe5\x8f\xaf\xe4\xbb\xa5\xe7\x9e\xac\xe9\x97\xb4\xe6\x89\xbe\xe5\x88\xb0\xe7\x9b\xb8\xe5\x85\xb3\xe7\x9a\x84\xe6\x90\x9c\xe7\xb4\xa2\xe7\xbb\x93\xe6\x9e\x9c\xe3\x80\x82"><link rel="shortcut icon" href="/favicon.ico" rel="external nofollow" type="image/x-icon" /><link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml" rel="external nofollow" title="\xe7\x99\xbe\xe5\xba\xa6\xe6\x90\x9c\xe7\xb4\xa2" /><link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu_85beaf5496f291521eb75ba38eacbd87.svg" rel="external nofollow" ><link rel="dns-prefetch" href="//dss0.bdstatic.com" rel="external nofollow" /><link rel="dns-prefetch" href="//dss1.bdstatic.com" rel="external nofollow" /><link rel="dns-prefetch" href="//ss1.bdstatic.com" rel="external nofollow" /><link rel="dns-prefetch" href="//sp0.baidu.com" rel="external nofollow" /><link rel="dns-prefetch" href="//sp1.baidu.com" rel="external nofollow" /><link rel="dns-prefetch" href="//sp2.baidu.com" rel="external nofollow" />

2、网络超时问题

在访问一个网页时,如果该网页长时间未响应,系统就会判断该网页超时,而无法打开网页。下面通过代码来模拟一个网络超时的现象。

import requests
# 循环发送请求50次
for a in range(1, 50):
  # 捕获异常
  try:
    # 设置超时为0.5秒
    response = requests.get('https://www.baidu.com/', timeout=0.5)
    # 打印状态码
    print(response.status_code)
  # 捕获异常
  except Exception as e:
    # 打印异常信息
    print('异常'+str(e))

结果:

200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200

以上代码中,模拟进行了50次循环请求,设置超时时间为0.5秒,在0.5秒内服务器未作出相应视为超时,程序会将超时信息打印在控制台中。

说起网络异常信息,requests模块同样提供了三种常见的网络异常类,示例代码如下:

import requests
# 导入requests.exceptions模块中的三种异常类
from requests.exceptions import ReadTimeout,HTTPError,RequestException
# 循环发送请求50次
for a in range(1, 50):
  # 捕获异常
  try:
    # 设置超时为0.5秒
    response = requests.get('https://www.baidu.com/', timeout=0.5)
    # 打印状态码
    print(response.status_code)
  # 超时异常
  except ReadTimeout:
    print('timeout')
  # HTTP异常
  except HTTPError:
    print('httperror')
  # 请求异常
  except RequestException:
    print('reqerror')

结果:

200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 正则式使用心得
May 07 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
pandas中Timestamp类用法详解
Dec 11 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 Python
Django如何开发简单的查询接口详解
May 17 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
Python2和Python3中@abstractmethod使用方法
Feb 04 Python
500行python代码实现飞机大战
Apr 24 Python
django rest framework serializers序列化实例
May 13 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
python Selenium 库的使用技巧
Oct 16 Python
python函数指定默认值的实例讲解
Mar 29 Python
sklearn和keras的数据切分与交叉验证的实例详解
Jun 19 #Python
Python虚拟环境的创建和包下载过程分析
Jun 19 #Python
通过实例解析python创建进程常用方法
Jun 19 #Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 #Python
为什么是 Python -m
Jun 19 #Python
Python 私有属性和私有方法应用场景分析
Jun 19 #Python
Python基于network模块制作电影人物关系图
Jun 19 #Python
You might like
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
javascript常用方法汇总
2014/12/02 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
js中url对象化管理分析
2017/12/29 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
python实现dict版图遍历示例
2014/02/19 Python
Python 通配符删除文件的实例
2018/04/24 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
python中添加模块导入路径的方法
2021/02/03 Python
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
九年级语文教学反思
2014/02/04 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
大学生团支书竞选稿
2015/11/21 职场文书