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实现动态图解析、合成与倒放
Jan 18 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
Python中 map()函数的用法详解
Jul 10 Python
Python unittest单元测试框架总结
Sep 08 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
Python生成个性签名图片获取GUI过程解析
Dec 16 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
Python pip配置国内源的方法
Feb 14 Python
python图形界面开发之wxPython树控件使用方法详解
Feb 24 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
利用Python制作动态排名图的实现代码
Apr 09 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
2019十大人气国漫
2020/03/13 国漫
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
MSN消息提示类
2006/09/05 Javascript
javascript编程起步(第三课)
2007/02/27 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
vue 监听屏幕高度的实例
2018/09/05 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
护士毕业生自我鉴定
2014/02/08 职场文书
学习经验演讲稿
2014/05/10 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
销售员态度差检讨书
2014/10/26 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
民事调解书范文
2015/05/20 职场文书
西柏坡观后感
2015/06/08 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书