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检测远程端口是否打开的方法
Mar 14 Python
python使用socket远程连接错误处理方法
Apr 29 Python
举例讲解Python中metaclass元类的创建与使用
Jun 30 Python
python之Character string(实例讲解)
Sep 25 Python
python实现简单的单变量线性回归方法
Nov 08 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 Python
Python 获取numpy.array索引值的实例
Dec 06 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 Python
记一次django内存异常排查及解决方法
Aug 07 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
Nodejs的express使用教程
2015/11/23 NodeJs
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
python实现分页效果
2017/10/25 Python
浅谈python数据类型及类型转换
2017/12/18 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python字符串格式化方式解析
2019/10/19 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
自我评价范文
2013/12/22 职场文书
创先争优活动方案
2014/02/12 职场文书
房屋租赁意向书
2014/04/01 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
mysql优化
2021/04/06 MySQL
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript