• Python之网络爬虫


     一、读取网页

    1、使用自带的urllib模块

    • 引入自带的模块urllib
    • 使用文件里面的urlopen模块

    (1)发送的是get请求:

    from urllib.request import urlopen
    
    url='http://www.nnzhp.cn/archives/423'
    
    res=urlopen(url).read() #打开url,获取url的网页内容   发送的是get请求
    print(res.decode()) #将结果返回的二进制类型转为字符串类型

    (2)发送的是post请求:

    from urllib.parse import urlencode  #由于不能直接传字典,要传二进制格式,所以导入该模块
    url='http://api.nnzhp.cn/api/user/login'
    data={'username':'niuhanyang','passwd':'aA123456'}
    data=urlencode(data) #先将字典拼接成k-v格式 
    print(data)  #结果:username=niuhanyang&passwd=aA123456
    res=urlopen(url,data.encode()).read() #再将k-v格式转成二进制
    print(res.decode()) #将返回的二进制转成字符串再返回
    import json
    d=json.loads(res.decode()) #为了获取value值,要将字符串转成字典
    print(d.get('login_info).get('sign') #获取sign的value值

    2、使用requests模块

    • 需要导入该模块:pip install requests

    (1)发送的是get请求:

    import requests
    url='http://www.nnzhp.cn/archives/423'
    res=requests.get(url)
    print(res.text) #使用.text就不用decode()了,直接返回的就是字符串

    (2)发送的是post请求:

    url='http://api.nnzhp.cn/api/user/login'
    res=requests.post(url,data={"username":"niuhanyang","passwd":"aA123456"}
    print(res.json()) #直接返回的就是字典,这个模块里面已经封装好了由json串转为字典的代码
    print(res.text) #返回的是字符串,json串

    (a)post请求带参数,上传的是字典格式,使用data={}:

    url='http://api.nnzhp.cn/api/user/login'
    res=requests.post(url,data={"username":"niuhanyang","passwd":"aA123456"}
    print(res.json()) #直接返回的就是字典,这个模块里面已经封装好了由json串转为字典的代码
    print(res.text) #返回的是字符串,json串

    (b)get请求带参数,上传的是字典格式,使用params={}:

    url='http://api.nnzhp.cn/api/user/login'
    res=requests.get(url,params={"username":"niuhanyang","passwd":"aA123456"}
    print(res.json()) #直接返回的就是字典,这个模块里面已经封装好了由json串转为字典的代码
    print(res.text) #返回的是字符串,json串

    二、下载内容

    1、下载文件:

    • 打开一个文件,将读取的网页内容写入到文件里,就相当于将内容下载到本地了。
    url='http://api.nnzhp.cn/api/user/login'
    res=requests.post(url,data={"username":"niuhanyang","passwd":"aA123456"}
    f=open('a.html','w',encoding='utf-8') #打开一个文件
    f.write(res)  #将读取的网页写入到文件里,就相当于将网页下载到本地
    f.close() #关闭文件

    2、下载mp3:

    • 导入requests模块
    • 使用.content方法,直接返回的就是二进制内容
    MP3_url='http://qiniuuwmp3.changba.com/1113525663.mp3'
    res=requests.get(MP3_url)
    mp3=res.content  #返回的是二进制内容
    
    f=open('sing.mp3','bw')  #保存内容到本地
    f.write(mp3)
    f.close()

    三、Requests模块返回内容

    • .json()方法返回的是字典
    url='http://api.nnzhp.cn/api/user/login'
    res=requests.post(url,data={"username":"niuhanyang","passwd":"aA123456"}
    print(res.json()) #直接返回的就是字典
    • .text返回的是字符串
    import requests
    url='http://www.nnzhp.cn/archives/423'
    res=requests.get(url)
    print(res.text) #使用.text就不用decode()了,直接返回的就是字符串
    • .content返回是二进制
    MP3_url='http://qiniuuwmp3.changba.com/1113525663.mp3'
    res=requests.get(MP3_url)
    mp3=res.content  #返回的是二进制内容

    四、请求带参数

    • 使用requests模块时

    (a)post请求带参数,上传的是字典格式,使用data={}

    (b)get请求带参数,上传的是字典格式,使用params={}

    (c)post请求带参数,上传的是json串,使用json={}

    五、实际应用

    1、下载mp3:

    • 导入requests模块
    • 使用.content方法,直接返回的就是二进制内容
    MP3_url='http://qiniuuwmp3.changba.com/1113525663.mp3'
    res=requests.get(MP3_url)
    mp3=res.content  #返回的是二进制内容
    
    f=open('sing.mp3','bw')  #保存内容到本地
    f.write(mp3)
    f.close()

    2、发送cookie:

    •  使用关键字cookies
    • 有多个cookie的时候逐个写入,用逗号隔开
    res=requests.get(url,params={"k":"v","k1":"v"},cookies={"sss":"xxx","xxx":"xxx"})

    3、发送headers:

    • 使用关键字headers
    • 有多个header的时候逐个写入,用逗号隔开
    res=requests.get(url,params={"k":"v","k1":"v"},cookies={"sss":"xxx","xxx":"xxx"},headers={"xxx":"xxx","xxx":"xxx"})

    如果cookie内容很多,可以利用headers,将内容写到一个字符串里作为value值,key的值为cookie即可。

    s='pgv_pvi=2531856384; RK=OHwkPOBgdj; ptcz=993813dc462da58d0efd9c1c8d03124c48754c9fccf24ce6b2d9368a462ed230; pt2gguin=o0961813439; pgv_pvid=7944371706; o_cookie=961813439; pac_uid=1_961813439; eas_sid=x1O5L366d2l1h5f3d4q0U6Z2F1; _qpsvr_localtk=0.24147254941682927; pgv_si=s8574745600; uin=o0961813439; pgv_info=ssid=s6318813470; skey=@DBbSi69hx; p_uin=o0961813439; pt4_token=jVWe4EaLYK760H4Ep-j0BxkdDj917sUw6S5hMXuur28_; p_skey=*r63etdnFjY2mlXWh-rmfuT7s1K1SLl077FdOHXO6Vk_'
    res=requests.get(url,params={'k':'v','k1':'v'},headers={'cookie':s})

    4、上传文件:

    url='http://api.nnzhp.cn/api/file/file_upload'
    res=requests.post(url,files={'file':open('g.mp3','rb')} #使用二进制方式打开
    print(res.json())

    5、上传的是json串:

    url='http://api.nnzhp.cn/api/user/add_stu'
    data={"phone":"13277778889","grade":"三年二班","name":"颜无柳"}
    requests.post(url,json=data) #传参传的是json串
    print(res.json())
    每天进步一点点,快乐生活多一点。
  • 相关阅读:
    [概述]移动机器人自主探索
    MRPT编译
    Kinect2.0相机标定
    小豆包的学习之旅:里程计运动模型
    小豆包的学习之旅:入门篇
    Kinect2.0点云数据获取
    COFF,amd64.vc90.mfc两个布署的问题
    [硬件]Robot运动控制
    [硬件]Urg_viewer数据读取
    [硬件]三维点云数据获取
  • 原文地址:https://www.cnblogs.com/yiruliu/p/9984615.html
Copyright © 2020-2023  润新知