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利用MethodType绑定方法到类示例代码
Aug 27 Python
python+selenium实现163邮箱自动登陆的方法
Dec 31 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
Jul 07 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
python实现将中文日期转换为数字日期
Jul 14 Python
Flask缓存静态文件的具体方法
Aug 02 Python
python获取本周、上周、本月、上月及本季的时间代码实例
Sep 08 Python
Python预测分词的实现
Jun 18 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入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
PHP多进程简单实例小结
2019/11/09 PHP
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
javascript 判断用户有没有操作页面
2017/10/17 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
Python中input和raw_input的一点区别
2014/10/21 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
Python3 读取Word文件方式
2020/02/13 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
岗位竞聘演讲稿
2014/01/10 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
食品安全工作实施方案
2014/03/26 职场文书
网络编辑求职信
2014/04/30 职场文书
学风建设演讲稿
2014/09/12 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL
Win11软件图标固定到任务栏
2022/04/19 数码科技