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中的__init__和__new__
Mar 12 Python
python多线程抓取天涯帖子内容示例
Apr 03 Python
在Linux中通过Python脚本访问mdb数据库的方法
May 06 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
python pandas修改列属性的方法详解
Jun 09 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
python中matplotlib实现随鼠标滑动自动标注代码
Apr 23 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 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实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
php筛选不存在的图片资源
2015/04/28 PHP
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
Python正则表达式使用经典实例
2016/06/21 Python
Python Socket使用实例
2017/12/18 Python
python 6行代码制作月历生成器
2020/09/18 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
计算机应用职专应届生求职信
2013/11/12 职场文书
医科大学生的自我评价
2013/12/04 职场文书
爱情寄语大全
2014/04/09 职场文书
一分钟演讲稿
2014/04/30 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
出纳工作检讨书
2014/10/18 职场文书
2014年妇联工作总结
2014/11/21 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
初中政教处工作总结
2015/08/12 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript