Requests数据抓取

Requests简介

Requests是Python的一个很实用的HTTP客户端库,完全满足如今网络爬虫的需求。与Urllib对比,Requests是在Urllib的基础上进一步封装的,具备Urllib的全部功能;在开发使用上,语法简单易懂,完全符合Python优雅、简洁的特性;在兼容性上,完全兼容Python2和Python3,具有较强的适用性。

请求方式

HTTP常用的请求方式是GET和POST,Requests对此区分两种不同的请求方式。

GET请求有两种形式,分别是不带参数和带参数,以百度为例:

#不带参数
https://www.baidu.com/
#带参数wd
https://www.baidu.com/s?wd=python

一般网址末端(域名)带有"?",就说明该URL是带有请求参数的,反之则不带有参数。GET参数说明如:

  1. wd是参数名,参数名由网站(服务器)规定。
  2. python是参数值,可由用户自行设定。
  3. 如果一个URL有多个参数,参数之间用“&”连接

Requests实现GET请求,对于带参数的URL有两种请求方式:

import requests
#第一种方式
r=requests.get('https://www.baidu.com/s?wd=python')

#第二种方式
url='https://www.baidu.com/s'
params={'wd':'python'}
#左边params在GET请求中表示设置参数
r=requests.get(url,params=params)
#输出生成的URL
print(r.url)

在实际开发中建议使用第一种,可使用字符串格式化对URL动态设置,例如:

'https://www.baidu.com/s?wd=%s'%('python')

POST请求是我们常说的提交表单,表单的数据内容就是POST的请求参数。Requests实现POST请求需设置请求参数data,数据格式可以为字典、元组、列表和JSON格式,不同的数据格式有不同的优势:

#字典类型
data={'key1':'value1','key2':'value2'}
#元组或列表
(('key1','value1'),('key2','value2'))
#JSON
import json
data={'key1':'value1','key2':'value2'}
#将字典转换为JSON
data=json.dumps(data)

#发送POST请求
r=requests.post("https://www.baidu.com/",data=data)
print(r.text)

当向网站(服务器)发送请求时,网站会返回相应的响应(response)对象,包含服务器响应的信息。Requests提供以下方法获取响应内容:

  • r.status_code:响应状态码。
  • r.raw:原始响应体,使用r.raw.read()读取。
  • r.content:字节方式的响应体,需要进行解码。
  • r.text:字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
  • r.headers:以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若不存在,则返回None。
  • r.json():Requests中内置的JSON解码器。
  • r.raise_for_status():请求失败(非200响应),抛出异常。
  • r.url:获取请求链接。
  • r.cookies:获取请求后的cookies。
  • r.encoding:获取编码格式。

复杂的请求方式

(1)添加请求头

(2)使用代理IP

(3)证书验证

 

(4)超时设置

 

 (5)使用cookies

 

 下载文件R

下载文件主要从服务器获取文件内容,然后将内容保存到本地。下载文件的方法如下:

import requests
url='http://220.181.91.148/amobile.music.tc.qq.com/M500001beoYX0K09xu.mp3?guid=4B895692D6A3432DF0AC51C79C387456&vkey=518281FA5C606D2F6D1316731B965408024AA531E641660D93C169404274876495970AAAC60D871525313F8BC3D8E468DF2D00829EBEA080&uin=1257661390&fromtag=140'

r=requests.get(url)
f=open('mymusic.m4a','wb')

#r.content获取响应的内容(字节流)
f.write(r.content)
f.close()

url是周杰伦《乌克丽丽》的音频文件的地址。怎么查看这个音频文件的地址呢?由于下载目前只能在QQ音乐PC客户端下载,所以想要在浏览器上没法查看音频文件的URL,我就使用wireshark抓包工具,对QQ音乐下载《乌克丽丽》的操作进行抓包,然后编写过滤规则,查询我本机上发出的http请求:

10.195.79.185是我的电脑的ip地址。可以发现一条是GET请求方式的http报文,点进去查看音频文件URI,点进链接发现确实是音频文件。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值