240
我爱毛绒绒~~~~~~~

爬虫 - Request库简介

Requests

安装

pip install requests

get请求

获取资源,通常用于读取

简单的get请求,如图所示

  import requests

  header = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
  res = requests.get('https://www.baidu.com', headers=header)

get请求得到Python对象,包含响应头,响应体等等(res为返回的response对象)

  • res.content:字节方式的响应体,需要进行解码

  • res.text:字符串方式的响应体,会自动根据响应头部的字符编码进行解码

  • res.url:获取请求链接

  • res.encoding:获取编码格式

  • res.status_code:响应状态码

  • res.headers:响应头信息

  • res.history:追踪重定向

  • res.iter_content():图片,视频,大文件,一点一点循环取出来

    import requests
    
    urls ='https://imglf6.lf127.net/img/044f60c2398a4552/MStRdmdPRFIrRjFWRk95R041Y296QUpheTlRaG9BMkl1QWRYUVBPalZtYz0.jpg'
    header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
    res = requests.get(url=urls,headers =header)
    print(res.iter_content())   ### 生成器<generator object iter_slices at 0x05252CB0>
    with open('cat.jpg','wb') as f:
        for i in res.iter_content():
            f.write(i)
    

  • res.cookies:获取请求后的cookies

  • res.cookies.get_dict():cookie,字典格式

  • res.cookies.items():cookie,列表格式

  • res.raise_for_status():请求失败(非200响应),抛出异常

  • get请求携带参数

    • 直接携带参数

    • params设置请求参数

get请求携带cookies

  • 在header中放

    header = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
        'cookie':'key=asdfasdfasdfsdfsaasdf;key2=asdfasdf;key3=asdfasdf'
    }
    res=requests.get('http://127.0.0.1:8000/index/',headers=header)
    
  • cookies设置

    header = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
    }
    # cookies是一个字典或者CookieJar对象
    res=requests.get('http://127.0.0.1:8000/index/',headers=header,cookies={'key':'asdfasdf'})
    
  • 自动携带cookie

    session=requests.session()
    res=session.post('http://127.0.0.1:8000/index/')  # 假设这个请求登录了
    res1=session.get('http://127.0.0.1:8000/order/')  # 现在不需要手动带cookie,session会帮咱处理
    
  • 使用代理
    代理池:列表放了一堆代理ip,每次随机取一个,再发请求就不会封ip了
    高匿和透明代理:如果使用高匿代理,后端无论如何拿不到你的ip,使用透明,后端能够拿到你的ip

    url = 'http://www.suqian360.com'
    header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
    res = requests.get(url=url,headers=header,proxies={'http':'112.54.41.177:9091',})
    print(res.status_code)  ###可以在网站的访问日志中查看这个字段:X-Forwarded-For就能看到源ip
    

  • 设置超时时间

    url = 'http://marry.pic.xishuw.net/'
    header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
    res = requests.get(url=url,headers=header,timeout=1)
    print(res.text)
    

post请求

提交数据,通常用与创建或更新资源

先学会谷歌工具查看

1. 先找到post请求

2. 在payload(载荷中找到自己请求的关键字)

payload通常以json格式发送,包含了请求参数和数据;在发送一个post请求时,payload可能包含表单数据,文件数据或者其他需要传递给服务器的数据

3. 然后在header(标头)中找到url

get请求可以直接使用浏览器中的url,但是post请求一定要用head中请求的url

代码运行如下:

response.json():可以直接反序列化并解码post的数据返回
如图所示

其他

随机生成ua头

安装:pip install fake_useragent

from fake_useragent import UserAgent

ua = UserAgent()
###随机生成
suiji = ua.random
###谷歌请求头
google = ua.chrome
###火狐请求头
firefox = ua.firefox
###safari请求头
safari = ua.safari
###ie请求头
ie = ua.edge

异常处理

from requests.exceptions import * #可以查看requests.exceptions获取异常类型

try:
    r=requests.get('http://www.baidu.com',timeout=0.00001)

except Exception as e:
    print(e)

编码问题

  • response对象获取乱码

    res=requests.get('http://www.autohome.com/news')
    # 一旦打印出来出现乱码问题
    # 方式一
    res.encoding='gb2312'
    # 方式二
    res.encoding=res.apparent_encoding
    
  • post请求返回解码

    from urllib.parse import unquote,urlencode
    print(unquote('\u86c7\u5c5e\uff0c\u87d2\u86c7\u5c5e'))
    

  • url解码编码

posted @   水开白  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示