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中每次处理一个字符的5种方法
May 21 Python
Python开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
Python转换时间的图文方法
Jul 01 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 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
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
php单例模式的简单实现方法
2016/06/10 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
请介绍一下Ant
2016/07/22 面试题
委托公证书样本
2015/01/23 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
Python利用zhdate模块实现农历日期处理
2022/03/31 Python
在 Python 中利用 Pool 进行多线程
2022/04/24 Python