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网络编程之读取网站根目录实例
Sep 30 Python
python uuid模块使用实例
Apr 08 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
Python面向对象类继承和组合实例分析
May 28 Python
Django项目开发中cookies和session的常用操作分析
Jul 03 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
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表单转换textarea换行符的方法
2010/09/10 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
python 实现删除文件或文件夹实例详解
2016/12/04 Python
python 换位密码算法的实例详解
2017/07/19 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
Python List cmp()知识点总结
2019/02/18 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
人力资源专员岗位职责
2014/01/30 职场文书
创建精神文明单位实施方案
2014/03/08 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
党委领导班子整改方案
2014/09/30 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
《从现在开始》教学反思
2016/02/16 职场文书