爬虫第三方库的使用

  • 一、urllib库的介绍与使用
    • 1、urlopen()方法
    • 2、Request()方法
    • 3、Robots协议
  • 二、requests库的介绍与使用
    • 1、GET请求
    • 2、POST请求
    • 3、文件上传
    • 4、Cookies
    • 5、会话维持
    • 6、SSL证书验证
    • 7、代理设置
    • 8、超时设置
    • 9、身份验证

一、urllib库的介绍与使用

1、urlopen()方法

使用该方法模拟浏览器向服务器发送请求,该方法处理授权验证、重定向、浏览器cookie以及其他内容。

使用方法如下:

#导入urllib库
import urllib.request
#爬取百度搜索首页
response = urllib.request.urlopen('https://www.baidu.com')
#打印爬取的内容
print(response.read().decode('utf-8'))
print(response)

【运行结果】

<html>
<head><script>location.replace(location.href.replace("https://","http://"));</script>
</head>
<body><noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>
</body>
</html>
<http.client.HTTPResponse object at 0x0000025895475EB8>

可以看出,该方法爬取到网页的源代码,返回值response的类型为HTTPResponse,该类型主要有以下方法:read(),readinto(),getheader(name),getheaders(),fileno()。

以上是urlopen最简单的用法,下面来详细介绍以下urlopen()函数

urllib.request.urlopen(url,data = None,timeout,cafile = None,capath = None,context = None)

(1)data参数

data参数是可选可不选的,如果选择data,data的类型必须为bytes类型,一般使用bytes()方法进行类型转换。选择data参数时,请求方式为POST,不选择data时,请求方法为GET。

(2)timeout参数

设置的超时时间,如果请求超过了设置的timeout,还没有得到响应,则抛出异常。

(3)cafile和capath参数

指定CA证书和其路径。

(4)context参数

指定SSL设置,类型必须为ssl.SSLContext。

2、Request()方法

该方法主要是在请求时加入了Headers信息。

其使用方式为:

urllib.request.Request(url,data = None,headers = {},origin_req_host = None,unverifiable = False,method = None)

(1)headers参数

该参数就是请求头,通常包含User-Agent,通过该请求头达到伪装成浏览器的目的,其类型为字典。

(2)origin_req_host参数

请求方的host或者是IP地址

(3)unverifiable参数

表示该请求是否是无法验证的。

(4)method参数

用来指示请求的方式,是GET还是POST。

3、Robots协议

该协议告诉爬虫和搜索引擎,那些界面可以爬取,那些界面是不允许爬取的。

使用robotparser模块解析robots.txt,该模块提供RobotFileParser方法:

urllib.robotparser.RobotFileParser(url="")
from urllib.robotparser import RobotFileParser
temp = RobotFileParser("https://www.baidu.com/robots.txt")
temp.read()
print(temp.can_fetch('*','https://www.baidu.com/link?'))

【运行结果】

False

直接访问robots.txt也可以看出,https://www.baidu.com/link?是不允许被爬取的。

因为urllib()对于cookie验证和代理服务的处理比较麻烦,故推出requests()方法库

二、requests库的介绍与使用

最简单的一个应用实例:

import requeststemp = requests.get('https://www.csdn.net/')print(type(temp))      #打印temp的数据类型
print(temp.status_code)#打印响应状态码
print(temp.cookies)    #打印Cookies
print(temp.text)       #打印爬取内容

【运行结果】

<class 'requests.models.Response'>
200
<RequestsCookieJar[<Cookie dc_session_id=10_1629708229451.640122 for .csdn.net/>, <Cookie uuid_tt_dd=10_18646630710-1629708229451-326208 for .csdn.net/>, <Cookie csrfToken=znQtNTJ5Z2tit_oJJtdTvb8V for www.csdn.net/>]>
<!doctype html><html lang="zh" data-server-rendered="true"><head><title>CSDN - 专业开发者社区</title> <meta name="keywords" content="CSDN博客,CSDN学院,CSDN论坛,CSDN直播"> <meta name="description" content="CSDN是全球知名中文IT技术交流平台,创建于1999年,包含原创博客、精品问答、职业培训、技术论坛、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区."> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"> <meta name="referrer" content="always"> <!----> <!----> <!----> <!----> <!----> <!----> <script src="https://g.csdnimg.cn/tingyun/1.8.5/www-index.js"></script><link rel="shortcut icon" href="https://g.csdnimg.cn/static/logo/favicon32.ico" type="image/x-icon"> <link rel="canonical" href="https://www.csdn.net"> <!----> <meta name="toolbar" content={"type":"0"} /><meta name="report" content={"spm":"1000.2115"} /><script src="https://g.csdnimg.cn/??lib/jquery/1.12.4/jquery.min.js,user-tooltip/2.2/user-tooltip.js,lib/qrcode/1.0.0/qrcode.min.js"></script> <script src='//g.csdnimg.cn/common/csdn-report/report.js' type='text/javascript'></script> <script src="https://g.csdnimg.cn/user-ordercart/2.0.1/user-ordercart.js?ts=2.0.1"></script><script src="https://g.csdnimg.cn/login-box/1.1.7/login-box.js"></script>......

下面我们详细了解requests库的各种请求用法。

1、GET请求

这里我们给出一个测试网站:http://httpbin.org/get,对该网站发起GET请求:

import requests
rp = requests.get("http://httpbin.org/get")
print(rp.text)

【运行结果】

{"args": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.25.1", "X-Amzn-Trace-Id": "Root=1-6123623a-1cc64df4378b3f9913a68485"}, "origin": "111.36.128.31", "url": "http://httpbin.org/get"
}

该网站是测试网站,数据采用JSON数据格式存储,当我们发送GET请求时,在请求加上参数,请求方式可以写成如下方式:

import requests
data = {'name':'little fox','age':20
}
rp = requests.get("http://httpbin.org/get",params = data)
print(rp.text)
print(type(rp.text)) #打印获取数据的类型

【运行结果】

{"args": {"age": "20", "name": "little fox"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.25.1", "X-Amzn-Trace-Id": "Root=1-61236364-0e7ea320083f082b7db5ace5"}, "origin": "111.36.128.31", "url": "http://httpbin.org/get?name=little+fox&age=20"
}
<class 'str'>

从运行结果也可以看出,该请求方式实际上是向服务器发送的该URL(http://httpbin.org/get?name=little+fox&age=20)的请求。

获取数据的类型为<class ‘str’>,对于该类型数据的处理是使用JSON()方法,将格式转化为字典类型。

引入headers参数

引入该参数的目的是将爬虫访问伪装成浏览器访问,避免服务器识别出请求为爬虫,从而禁止爬取。

此处添加的headers参数主要是User-Agent,以爬取CSDN首页为例:

URL:https://blog.csdn.net/?spm=1001.2014.3001.4477

User-Agent查看方法:

在首页界面按F12进入浏览器检查界面:

import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
url = 'https://blog.csdn.net/?spm=1001.2014.3001.4477'
rp = requests.get(url = url,headers = headers)
print(rp.text)

【运行结果】

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="referrer"content="always"><meta name="msvalidate.01" content="3189512127C34C46BC74BED5852D45E4" /><title>CSDN博客 - 专业IT技术发表平台</title><meta data-n-head="true" data-hid="description" name="description" content="CSDN博客为中国软件开发者、IT从业人员、IT初学者打造交流的专业IT技术发表平台,全心致力于帮助开发者通过互联网分享知识,让更多开发者从中受益,一同和IT开发者用代码改变未来."><script src='//g.csdnimg.cn/tingyun/1.8.3/www.js' type='text/javascript'></script><link ref="canonical"  href="https://blog.csdn.net"><link href="https://g.csdnimg.cn/static/logo/favicon32.ico" rel="shortcut icon" type="image/x-icon"/><link rel="stylesheet" href="//csdnimg.cn/public/common/toolbar/content_toolbar_css/content_toolbar.css"><link rel="stylesheet" href="//csdnimg.cn/public/common/libs/bootstrap/css/bootstrap.min.css"><link rel="stylesheet" href="//csdnimg.cn/public/static/css/avatar.css"><link href="//g.csdnimg.cn/nav-second/1.0.3/css/nav-second.css" type="text/css" rel="stylesheet"><script src="//csdnimg.cn/public/common/libs/jquery/jquery-1.9.1.min.js" type="text/javascript"></script><link href='/css/csdn_feed.css?1627614636' rel='stylesheet' /><meta name="report" content='{"spm":"1001.2100"}'>
</head>
<body data-category="home" data-host_type="blog"><script src="//g.csdnimg.cn/common/csdn-toolbar/csdn-toolbar.js" type="text/javascript"></script><script src="https://g.csdnimg.cn/??login-box/1.1.4/login-box.js,login-box/1.1.4/login-auto.js"></script><div class="container clearfix"> <nav id="nav" class="clearfix"></nav><div class="fixed_content" id="mainContent"><!--头部banner广告 begin--><!--头部banner广告end--><main><!DOCTYPE html><div class="carousel"><div class="carousel-left"><div id="myCarousel" class="slide" data-ride="carousel"><!-- Indicators --><ol class="carousel-indicators"><li data-target="#myCarousel" data-slide-to="0" class="active"></li><li data-target="#myCarousel" data-slide-to="1" class=""></li><li data-target="#myCarousel" data-slide-to="2" class=""></li></ol><div class="carousel-inner" role="listbox" data-report-view='{"mod":"popu_465","strategy":""}'>                    ......

2、POST请求

import requests
data = {'name':'little fox','age':20
}
rp = requests.post("http://httpbin.org/get",params = data)
print(rp.text)
print(type(rp.text)) #打印获取数据的类型

【运行结果】

{"args": {}, "data": "", "files": {}, "form": {"age": "20", "name": "little fox"}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "22", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.25.1", "X-Amzn-Trace-Id": "Root=1-612369a5-1fd9709e318dd6dd21736dca"}, "json": null, "origin": "111.36.128.31", "url": "http://httpbin.org/post"
}<class 'str'>

在返回结果中,我们可以看到form中就是我们使用表单提交的数据。

3、文件上传

requests可以模拟一些数据的上传,因此也可以向网站上传一些文件。

例如上传一个txt类型的测试文件。

import requestsfiles = {'file':open('reauests测试文件.txt','rb')}
rp = requests.post('http://httpbin.org/post',files = files)
print(rp.text)

【运行结果】

{"args": {}, "data": "", "files": {"file": "reauests\u6d4b\u8bd5\u6587\u4ef6"}, "form": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "210", "Content-Type": "multipart/form-data; boundary=7d7ca86cec7b89327059ba0e878a6778", "Host": "httpbin.org", "User-Agent": "python-requests/2.25.1", "X-Amzn-Trace-Id": "Root=1-61236c63-7cde90c158366b4b40ded960"}, "json": null, "origin": "111.36.128.31", "url": "http://httpbin.org/post"
}

4、Cookies

这里我们介绍两种Cookies获取方法

第一种:

import requests
rp = requests.get("https://www.baidu.com")
print(rp.cookies)
for (key,value) in rp.cookies.items():print(key + '=' + value)

【运行结果】

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
BDORZ=27315

第二种:

5、会话维持

使用Session对象,进行会话的维持。

import requests
s = requests.Session()
s.get("http://httpbin.org/cookies/set/age/20")
rp = s.get("http://httpbin.org/cookies")
print(rp.text)

【运行结果】

{"cookies": {"age": "20"}
}

使用Session对象可以方便的维护一个会话,而不用担心Cookies问题。

6、SSL证书验证

当爬取一个不具备SSL证书的网站时,通常会报SSL Error的错误,这是因为在爬取发送请求,默认检查网站是否具有SSL证书,如果要解决此错误,可在发送请求时,将参数verify设置为False。

7、代理设置

在进行大规模爬取时,网站可能会弹出验证码,或者是跳转到登录界面,还可能封禁IP等反爬机制,为了防止出现这种情况,通常设置代理来进行大规模的爬取,使用到的参数为proxies。

import requests
proxies = {"http":"http://10.0.0.1:8888",  #此处设置为自己的有效代理
}
requests.get("https://www.csdn.net/",proxies = proxies)

8、超时设置

设置一个超时时间,该时间是发出请求到服务器返回响应的时间。使用到的参数为timeout。

(1)设置整体时间

rp = requests.get("https://www.csdn.net/",timeout = 1)

(2)单独设置时间

rp = requests.get("https://www.csdn.net/",timeout = (5,20)) #5代表连接阶段的时间,20代表读取阶段的时间

(3)永久等待

rp = requests.get("https://www.csdn.net/",timeout = None)
或者
rp = requests.get("https://www.csdn.net/")

9、身份验证

在爬取界面通常会遇到登录的情况,而requests库在请求时也有对应的解决方案,使用到的参数为:auth,auth的类型是一个元组,里面包含登录信息,例如用户名、密码等。

rp = requests.get("https://www.csdn.net/",auth = ('littlefox','123456789'))

python网络爬虫——爬虫第三方库的使用(二)相关推荐

  1. python第三方库排行-Python模块汇总(常用第三方库)

    模块 定义 计算机在开发过程中,代码越写越多,也就越难以维护,所以为了编写可维护的代码,我们会把函数进行分组,放在不同的文件里.在python里,一个.py文件就是一个模块 优点: 提高代码的可维护性 ...

  2. python数据分析方向的第三方库是_python数据分析方向的第三方库是什么

    python数据分析方向的第三方库是:1.Numpy:2.Pandas:3.SciPy:4.Matplotlib:5.Scikit-Learn:6.Keras:7.Gensim:8.Scrapy. 本 ...

  3. Python中常用的第三方库

    Python中常用的第三方库 库名 用途 numpy n维数据表示和运算 matplotlib 二维数据可视化 numpy n维数据表示和运算 pil 图像处理 scikit-learn 机器学习和数 ...

  4. java调用第三方dll文件 源码_C++调用python文件(包含第三方库)

    本文内容主要参考以下两篇文章: 武军:C++中调用python(VS2017)​zhuanlan.zhihu.com C++调用python的那些坑(详细教程步骤)_giser_xupf的博客-CSD ...

  5. python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案

    python使用pip安装第三方库(工具包)速度慢.超时.失败的解决方案 参考文章: (1)python使用pip安装第三方库(工具包)速度慢.超时.失败的解决方案 (2)https://www.cn ...

  6. python分析方向的第三方库_Python 机器学习方向的第三方库是

    Python 机器学习方向的第三方库是 答:TensorFlow "城门立木"是立法史上的重要事件.( ) 答:正确 慢性支气管炎最重要的病因是: 答:感染 家具设计的设计程序主要 ...

  7. 解决python利用pip安装第三方库失败的问题

    解决python利用pip安装第三方库失败的问题 SyntaxError: invalid syntax 前些天用python去写作业,发现PyCharm中无法安装numpy库,所以打算用pip安装工 ...

  8. python web开发第三方库_以下属于Python中Web开发框架第三方库的是__________

    以下属于Python中Web开发框架第三方库的是__________ 答:Django 关于为何要敬业乐群,下列说法错误的是?() 答:敬业乐群可以作为提升我们学习.工作的效率和成果,乃至提升我们生命 ...

  9. python中哪个库用于中文分词_以下属于?Python?中文分词方向第三方库的是:

    以下属于?Python?中文分词方向第三方库的是: 答:jieba 霍兰德代码由几个字母组成: 答:3 在弹性价格下的货币模型下,当汇率变动与本国货币存量的供给成正比,与外国货币供给成反比,当本国货币 ...

  10. Python最好的Excel第三方库——xlwings快速上手

    文章目录 简介 安装 初试 隐藏Excel 工作簿和工作表 读写数据 数据兼容 填充颜色 插入图片 设置字体 设置列宽 设置边框 合并拆分单元格 插入公式 其他 宏 UDFs: 用户定义函数 用户设置 ...

最新文章

  1. python爬虫(四)_urllib2:handle处理器和自定义opener
  2. ImageView、Bitmap的属性android:scaleType
  3. 搭建一个自己的SVN服务器
  4. cocos2dx迷你地图
  5. sklearn模型使用贝叶斯优化调参(以随机森林为例)
  6. liunx查询进程下的线程
  7. Android开发者指南-用户界面-拖放-Drag and Drop[原创译文]
  8. docker 容器无法连接外网
  9. Sublime Text for Mac如何支持GBK编码
  10. php stack trace,PHP 异常处理
  11. MATLAB 批量下载网页中的数据
  12. 使用C++实现FC红白机模拟器 概述
  13. 百度地图api 刷新地图_百度地图VS高德地图,谁更胜一筹?
  14. php在线售卡系统,云尚在线发卡系统PHP源码|专门为个人或小型企业提供在线售卡,订单处理系统...
  15. 在DW中制作网页中的表单
  16. 电脑双系统完美卸载Ubuntu
  17. java excel 图表_java POI实现向Excel中插入图片
  18. 大学生php实训总结_php实训报告心得体会
  19. matlab应用测试,moocMATLAB程序与应用单元测试答案
  20. 用echarts做双y轴折线图柱状图混合实时更新图

热门文章

  1. matlab 解方程组 矩阵,用MATLAB计算矩阵和解线性方程组.ppt
  2. 经典mysql数据库面试题_【数据库】MySQL经典面试题(练习)
  3. Linux线程-pthread_kill
  4. 2022年最新视觉框架VM PRO 2.7版本,C#源码框架,机器视觉源码框架
  5. 微信协议mmtls的分析研究与总结
  6. 04 flowable DMN规则引擎几种类型解释
  7. AAL:ATM 适配层(AAL0、AAL2、AAL3/4、AAL5)--网络大典
  8. 剖析抖音爆火的美食探店大佬,揭秘他们的运营秘诀
  9. SonarQube的缺陷详解
  10. 机器人玛娜图片_怪兽惨死录:智能机器人:玛娜篇二