zoukankan      html  css  js  c++  java
  • 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())
    每天进步一点点,快乐生活多一点。
  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/yiruliu/p/9984615.html
Copyright © 2011-2022 走看看