Python爬虫headers处理及网络超时问题解决方案
时间:2022-07-27
本文章向大家介绍Python爬虫headers处理及网络超时问题解决方案,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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-- nnn 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="xe5x85xa8xe7x90x83xe6x9cx80xe5xa4xa7xe7x9ax84xe4xb8xadxe6x96x87xe6x90x9cxe7xb4xa2xe5xbcx95xe6x93x8exe3x80x81xe8x87xb4xe5x8ax9bxe4xbax8exe8xaexa9xe7xbdx91xe6xb0x91xe6x9bxb4xe4xbexbfxe6x8dxb7xe5x9cxb0xe8x8exb7xe5x8fx96xe4xbfxa1xe6x81xafxefxbcx8cxe6x89xbexe5x88xb0xe6x89x80xe6xb1x82xe3x80x82xe7x99xbexe5xbaxa6xe8xb6x85xe8xbfx87xe5x8dx83xe4xbaxbfxe7x9ax84xe4xb8xadxe6x96x87xe7xbdx91xe9xa1xb5xe6x95xb0xe6x8dxaexe5xbax93xefxbcx8cxe5x8fxafxe4xbbxa5xe7x9exacxe9x97xb4xe6x89xbexe5x88xb0xe7x9bxb8xe5x85xb3xe7x9ax84xe6x90x9cxe7xb4xa2xe7xbbx93xe6x9ex9cxe3x80x82" <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="xe7x99xbexe5xbaxa6xe6x90x9cxe7xb4xa2" / <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
以上就是本文的全部内容,希望对大家的学习有所帮助。
- ajax跨域有没有踩过坑,IE低版本浏览器如何支持?
- 你可能不知道的 Django Rest Framework 的两个新特性
- PHP数据结构(八) ——赫夫曼树实现字符串编解码(实践2)
- 你应该使用 Python 管理 Cron 作业
- CSS3有哪些好用的属性?
- PHP数据结构(九) ——图的定义、存储与两种方式遍历
- 使用 React 和 Django REST Framework 构建你的网站
- 小程序中带图片modal的实现
- 号称「永远不会输钱」的马丁格尔策略
- 小程序中图片高度等比缩放
- 三分钟使用 Python 处理 Nginx 日志
- Python,Shell 和 三个标准文件
- 【微信官方】获取用户信息方案介绍
- 【实战】如何使用 Python 从 Redis 中删除 4000万 KEY
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 撸了个多线程断点续传下载器,我从中学习到了这些知识
- 使用 IOC 控制反转和 DI 依赖注入的意义
- Servlet配置初始值,并获取初始值
- CSS 技巧一则 -- 不定宽溢出文本适配滚动
- 潘石屹用Python解决100个问题 | 最大公约数
- 我的天上传文件又出现问题了(超出大小限制)
- 现在学 PHP 没有发展?来看看这个后台框架你还会这么想吗
- leetcode-easy-array-最大子序和
- Leecode No.3 无重复字符的最长子串
- Solidity 0.6.11 更新
- 潘石屹用Python解决100个问题 | 最小公倍数
- 通过CREATE2获得合约地址:解决交易所充值账号问题
- 小知识:如何判定crontab任务的执行频度
- 以太坊合约静态分析工具Slither简介与使用
- Cesium第一次搭建环境出不来地球的问题