欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬虫之requests库

程序员文章站 2022-07-14 11:18:50
...

1、requests库介绍

  Python自带的请求库urllib库用起来不是很方便,特别是指定请求方式、处理cookie等方面上做的不是很好。第三方库requests库便解决了很多麻烦。requests库可以直接通过get()、post()、delete()方法发送请求,无论是语义上还是简易度都比urllib要好很多。

2、请求方法

  最常用的请求方法包括GET、POST、PUT、DELETE四种,分别对应查,增,改,删四种操作。jpa操作中对一般对PUT()的使用指需要传数据库中某个表中数据的id值和需要修改的属性即可,delete()就更简单了,传id值即可。因此,我们重点需要说的是GET和POST方法。
Python爬虫之requests库
  简单来说,就是get()传递的参数不安全,没有保密功能,适合做查询功能,比如我们在百度搜索东西,域名后跟着那一大串东西就是参数,我们是可以看见的。而post()的参数较为安全,我们一般看不到,适合做增加功能,比如我们在注册用户时,实际就是向数据库中添加一条用户记录,此时我们不希望将密码等信息暴露,就需要post()方法。

下面演示使用request中的get()和post():

import requests
"""
使用get方法发送请求
"""
if __name__ == '__main__':
    """
    def get(url, params=None, **kwargs):
    url:目标url
    params:请求参数,字典类型(也可以说是json数据)
    """
    data = {
        "name":"Tom",
        "age":23
    }
    response = requests.get("http://httpbin.org/get",params=data)
    print(response.text)

结果返回:

{
"args": {
“age”: “23”,
“name”: “Tom”
}
,
“headers”: {
“Accept”: “/”,
“Accept-Encoding”: “gzip, deflate”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.23.0”,
“X-Amzn-Trace-Id”: “Root=1-5e65ef5b-c34857961bf8a91a5e993244”
},
“origin”: “113.101.32.108”,
“url”: “http://httpbin.org/get?name=Tom&age=23”
}

  使用get方法抓取二进制数据,因为网络上每一个资源(包括图片和音视频等等)都有属于自己的URL:

import requests
if __name__ == '__main__':
    """
    获取淘宝网的logo
    """
    response = requests.get("http://taobao.com/favicon.ico")
    # 由于是二进制数据,所以直接输出内容没什么意义
    # 保存到本地
    with open("favicon.ico",'wb') as f:
        f.write(response.content)

post()方法演示:

import requests

if __name__ == '__main__':
    data = {
        "name": "Tom",
        "age": 23
    }
    response = requests.post("http://httpbin.org/post", data=data)
    print(response.text)

{
“args”: {},
“data”: “”,
“files”: {},
“form”: {
“age”: “23”,
“name”: “Tom”
},
“headers”: {
“Accept”: “/”,
“Accept-Encoding”: “gzip, deflate”,
“Content-Length”: “15”,
“Content-Type”: “application/x-www-form-urlencoded”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.23.0”,
“X-Amzn-Trace-Id”: “Root=1-5e65f1d6-c0a78fcc0432fb4c7d32fec8”
},
“json”: null,
“origin”: “113.101.32.108”,
“url”: “http://httpbin.org/post”
}

使用post传递的参数都被保存form属性里,因为我们通常是使用表单上传数据的。

3、其他用法

不多说了,用法不难,看代码和注释便一目了然

import requests

def fileUpoload():
    """
    上传文件的方法
    """
    files = {       # 构造上传文件的json格式数据
        'file':open('favicon.ico','rb')
    }
    response = requests.post("http://httpbin.org/post",files=files)
    print(response.text)

def getCookies():
    response = requests.get("http://www.baidu.com")
    cookies = response.cookies
    for k,v in cookies.items():
        print(k , "=" , v)

def getSession():
    """
    获取会话 
    """
    session = requests.Session()
    session.get("http://httpbin.org/cookies/set/numner/123456789")  # 一种REST风格的URL格式,相当于向cookie设置number=123456789
    # 只要session没有被关闭,便可以获得会话中的数据
    response = session.get("http://httpbin.org/cookies")
    print("第一个会话数据:" , response.text)
    session.close()
    # 开启另一个会话
    anotherSession()

def anotherSession():
    session = requests.Session()
    response = session.get("http://httpbin.org/cookies")
    print("第二个会话数据:" ,response.text)

if __name__ == '__main__':
    # fileUpoload()
    # getCookies()
    getSession()

有错误的地方敬请指出!觉得写得可以的话麻烦给个赞!欢迎大家评论区或者私信交流!

相关标签: 爬虫 python