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 错误和异常小结
Oct 09 Python
Python中的CURL PycURL使用例子
Jun 01 Python
python实现同时给多个变量赋值的方法
Apr 30 Python
Python中operator模块的操作符使用示例总结
Jun 28 Python
python实现分页效果
Oct 25 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
Python自省及反射原理实例详解
Jul 06 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 Python
python 爬取英雄联盟皮肤并下载的示例
Dec 04 Python
python requests模块的使用示例
Apr 07 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 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
smarty中js的调用方法示例
2014/10/27 PHP
PHP curl使用实例
2015/07/02 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
python多进程控制学习小结
2018/10/31 Python
python 读取文件并把矩阵转成numpy的两种方法
2019/02/12 Python
浅谈PYTHON 关于文件的操作
2019/03/19 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
如何利用python 读取配置文件
2021/01/06 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
什么是方法的重载
2013/06/24 面试题
应用数学专业求职信
2014/03/14 职场文书
个人培训自我鉴定
2014/03/28 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
好媳妇事迹材料
2014/12/24 职场文书
工商局个人工作总结
2015/03/03 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
革命电影观后感
2015/06/18 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python