• python爬虫03:那个叫做 Urllib 的库让我们的 python 假装是浏览器


    相信你已经摸清了

     

    浏览器各种请求的套路

     

    也知道了怎么在手机上进行请求和返回数据的抓取

     

    那么接下来我们就开始来使用 python 了

     

     

    代码 lu 起来

     

     

     

    那么

     

    怎么用 python 写各种请求呢?

     

    今天要给大家介绍的就是

     

    Urllib

     

    这可是 python 内置的库

     

    有了它

     

    我们写代码就轻松了

     

    腰也不疼了

     

    腿也不酸了

     

    头发也不秃了

     

     

     

    那么怎么使用 Urllib 呢?

     

     

    接下来

     

    就是

     

    学习 python 的正确姿势

     

     

     

    在 Python 这个内置的 Urllib 库中

     

    有这么 4 个模块

     

    request

     

    request模块是我们用的比较多的

     

    就是用它来发起请求

     

    所以我们重点说说这个模块

     

    error

     

    error模块呢,就是当我们在使用 request 模块遇到错了

     

    就可以用它来进行异常处理

     

    parse

     

    parse模块就是用来解析我们的 URL 地址的,比如解析域名地址啦,URL指定的目录等

     

    robotparser

     

    这个用的就比较少了,它就是用来解析网站的 robot.txt

     

    ok

     

    了解了 urllib 之后

     

    我们就用 python 代码来模拟请求吧

     

     

    打开 pycharm

     

    如果你还不太知道 pycharm 这个开发工具怎么玩的话

     

    你可以看看这玩意

     

    PyCharm使用教程:PyCharm常用技巧指南

     

    当然

     

    你喜欢别的编辑器也无所谓

     

    反正我觉得

     

    Pycharm

     

    就是

     

     

    首先我们来模拟请求百度吧

     

    超简单

     

    request 模块中的 urlopen 方法

     

    首先我们导入 urllib 的请求模块

     

    import urllib.request

     

    我们在浏览器访问百度的时候

     

    对于 python 来说

     

    就是一句代码的事情

     

    urllib.request.urlopen('http://www.baidu.com')

     

     

    我们通过 request 模块的 urlopen 方法

     

    直接用 Get 请求方式请求百度了

     

    那么返回的内容就是和浏览器一样的

     

    我们可以打印出来

     

    response = urllib.request.urlopen('http://www.baidu.com')
    print(response.read().decode('utf-8'))

     

    我们执行

     

     

    百度把源码返回给我们了

     

     

     

     

    request 的 urlopen 方法

     

    可以传入的参数主要有 3 个

     

    urllib.request.urlopen(urldata=None[timeout]*)

     

    第一个 url 就是我们请求的链接

     

    比如我们刚刚就请求百度

     

    第二个参数 data

     

    就是专门给我们 post 请求携带参数的

     

    比如我们在登录的时候

     

    可以把用户名密码封装成 data 传过去

     

    在这里的 data 的值我们可以用 byte 的类型传递

     

    第三个参数 timeout 就是设置请求超时时间

     

    如果等好久服务器都没有给我们返回数据

     

    我们就不鸟他了!

     

    这就是  request 的 urlopen 主要用法。

     

     

    urlopen 好像不错

     

    但是

     

    如果我们要欺骗服务器说我们是浏览器或者手机请求的呢?

     

    这个时候我们需要添加请求头信息

     

    也就是我们上次说的

     

    request header

     

    那么

     

    这个时候

     

    就该让 request 模块中的 Request 方法出场了

     

    这个 Request 方法的参数多一些

     

    主要的参数

     

    urllib.request.Request(urldata=Noneheaders={}method=None)

     

    我们除了定义 url 和 data 之外

     

    我们还可以定义请求头信息

     

     

    urlopen 默认是 Get 请求

     

    当我们传入参数它就为 Post 请求了

     

    而 Request 可以让我们自己定义请求的方式

     

    这样我们就可以使用 Request 来封装我们的请求信息

     

     

     

    我们来用 Request 玩一下吧

     

    我们来模拟登陆「逼乎」吧

     

    https://biihu.cc/

     

    没错

     

    就是那个山寨知乎的网站

     

    与世界分享你的装逼技巧与见解

     

     

    进入网站进行登录

     

    我们来抓一下数据先

     

    通过 Fiddler 可以看到我们的请求参数

     

     

    这密码不加密的

     

     

    然后我们再看看我们的请求头信息

     

     

    好了

     

    知道这些之后我们就可以来模拟登录了

     

    导入 urllib

     

    from urllib import request,parse
    import ssl

     

    在这里我们还要导入 ssl

     

    因为逼乎这个b用的是 https

     

    我们可以使用 ssl 未经验证的上下文

     

    context = ssl._create_unverified_context()

     

    接着定义一下我们的请求 url 和 header

     

    url = 'https://biihu.cc//account/ajax/login_process/'
    headers = {
    #假装自己是浏览器
       'User-Agent':' Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    }

     

    再定义一下我们的请求参数

     

    dict = {
    'return_url':'https://biihu.cc/',
       'user_name':'xiaoshuaib@gmail.com',
       'password':'123456789',
       '_post_type':'ajax',
    }

     

    我们把请求的参数转化为 byte

     

    data = bytes(parse.urlencode(dict),'utf-8')

     

    然后我们就可以封装 request 了

     

    req = request.Request(url,data=data,headers=headers,method='POST')

     

    最后我们进行请求

     

    response = request.urlopen(req,context=context)
    print(response.read().decode('utf-8'))

     

    ok

     

    这样我们就模拟登录了

     

    运行一下看看

     

    {"rsm":{"url":"https://biihu.cc/home/first_login-TRUE"},"errno":1,"err":null}

     

    可以看到我们成功登录逼乎了

     

     

    ok

     

    以上就是 Urllib 的常用使用方法了

     

    (完)

     

    扫一扫

     

     

     

     

     

     

     

     

                                顺手,点个好看

  • 相关阅读:
    开发常见错误之 :Missing artifact com.sun:tools:jar 1.7.0
    开发常见错误之 : Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar
    kafka集群部署
    kafka
    Oracle 学习之触发器
    CloudSetuper
    erlang :打开界面工具的命令
    erlang 二进制中 拼接 变量或者函数 报错
    Python内部机制。
    AOP (面向切面编程)
  • 原文地址:https://www.cnblogs.com/fxxkpython/p/10832002.html
Copyright © 2020-2023  润新知