美文网首页
2.requests应用

2.requests应用

作者: JarvisTH | 来源:发表于2020-06-01 17:06 被阅读0次

    引入库:

    import requests
    

    给出需要爬取的地址:

    url="https://www.baidu.com/"
    

    获取响应:

    response=requests.get(url)
    data=response.text
    print(data)
    

    1.pos

    • 账号登录
    • 搜索内容
    • 上传图片
    • 上传文件
    • 往服务器传数据 等

    2.get

    • 正常打开网页
    • 不往服务器传数据

    很多网页使用 get 就可以了,而 post, 我们则是给服务器发送个性化请求, 比如将你的账号密码传给服务器, 让它给你返回一个含有你个人信息的 HTML。

    get使用方法如上,post使用如下:
    首先我们调出浏览器的 inspect (右键点击 inspect, 中文是检查还是什么来着). 然后发现我们填入姓名的地方原来是在一个 <form> 里面。

    这个 <form> 里面有一些 <input> 个 tag, 仔细看到 <input> 里面的关键信息,填好后, 为了记录点击 “submit” 后, 浏览器究竟发生了的变化, 在 inspect 窗口, 选择 Network, 勾选 Preserve log, 再点击 “submit”,就能看到服务器返回定制化后的页面时, 使用的方法和数据:

    • Request URL (post 要用的 URL)
    • Request Method (post)
    • Form Data (post 去的信息)

    Form data, 组织成一个 python 字典. 让后把这个字典传入 requests.post(), 注意, 这里的 post 里面的 url,是上面的Request URL。

    data = {'firstname': '莫烦', 'lastname': '周'}
    r = requests.post('http://pythonscraping.com/files/processing.php', data=data)
    print(r.text)
    

    3.上传图片
    传照片也是 post 的一种,将本地的照片文件传送到服务器。

    留意观察 url, 会发现, 传送完照片以后的 url 有变动。使用同样的步骤再次检查, 发现, “choose file” 按键链接的 <input> 是一个叫 uploadFile 的名字. 将这个名字记下, 放入 python 的字典当一个 “key”。

    接着在字典中, 使用 open 打开一个图片文件, 当做要上传的文件. 把这个字典放入你的 post 里面的 files 参数. 就能上传你的图片了, 网页会返回一个页面, 将你的图片名显示在上面。

    file = {'uploadFile': open('./image.png', 'rb')}
    r = requests.post('http://pythonscraping.com/files/processing2.php', files=file)
    print(r.text)
    

    4.登录
    登录账号, 浏览器做了什么:

    • 使用 post 方法登录 url
    • post 的时候, 使用了 Form data 中的用户名和密码
    • 生成了一些 cookies

    因为打开网页时, 每一个页面都是不连续的, 没有关联的, cookies 就是用来衔接一个页面和另一个页面的关系。所以大部分时候, 每次你登录, 你就会有一个 cookies, 里面会提到你已经是登录状态了.。所以 cookie 在这时候很重要. cookies 的传递也特别重要, 比如用 requests.post + payload 的用户信息发给网页, 返回的 r 里面会有生成的 cookies 信息. 接着请求去登录后的页面时, 使用 request.get, 并将之前的 cookies 传入到 get 请求. 这样就能已登录的名义访问 get 的页面了。

    payload = {'username': 'Morvan', 'password': 'password'}
    r = requests.post('http://pythonscraping.com/pages/cookies/welcome.php', data=payload)
    print(r.cookies.get_dict())
    
    # {'username': 'Morvan', 'loggedin': '1'}
    
    
    r = requests.get('http://pythonscraping.com/pages/cookies/profile.php', cookies=r.cookies)
    print(r.text)
    
    # Hey Morvan! Looks like you're still logged into the site!
    

    5.使用Session登录
    不过每次都要传递 cookies 是很麻烦的,使用Session, 在一次会话中, cookies 信息都是相连通的, 它自动帮我们传递这些 cookies 信息。

    同样是执行上面的登录操作, 下面就是使用 session 的版本。

    创建完一个 session 过后, 我们直接只用 session 来 post 和 get.。而且这次 get 的时候, 我们并没有传入 cookies.。但是实际上 session 内部就已经有了之前的 cookies 了。

    session = requests.Session()
    payload = {'username': 'Morvan', 'password': 'password'}
    r = session.post('http://pythonscraping.com/pages/cookies/welcome.php', data=payload)
    print(r.cookies.get_dict())
    
    # {'username': 'Morvan', 'loggedin': '1'}
    
    
    r = session.get("http://pythonscraping.com/pages/cookies/profile.php")
    print(r.text)
    
    # Hey Morvan! Looks like you're still logged into the site!
    

    相关文章

      网友评论

          本文标题:2.requests应用

          本文链接:https://www.haomeiwen.com/subject/fdyszhtx.html