• Python爬虫学习:Python内置的爬虫模块urllib库


    urllib库

    • urllib库是Python中一个最基本的网络请求的库。它可以模拟浏览器的行为发送请求(都是这样),从而获取返回的数据

    urllib.request

    在Python3的urllib库当中,所有和网络请求相关的方法都被集成到了urllib.request模块下

    #基本使用
    from urllib import request
    
    resp = request.urlopen("URL")
    
    print(resp.read())

    如果是成功的,那么我们打印的内容和在浏览器中右击查看源代码的内容是一样的。

    urlopen接受两个参数:

    • url:请求的url地址
    • data:请求的data,如果设置了这个值,请求就会变成是POST请求

    返回值:返回值是一个http.client.HTTPResponse对象,这个对象是一个类 文件句柄 对象。有read(size)、readline、readlines以及getcode等方法

    urlretrieve函数

    这个函数可以非常方便的将网页上的内容保存到本地。

    from urllib import request
    
    request.urlretrieve("URL","本地保存的文件"

    urlencode函数

    用浏览器发送请求的时候,如果url中包含了中文或者是其他的特殊字符,那么浏览器会自动的给我们进行一个编码。而如果是我们的爬虫,我们就只能手动的进行编码。

    urlencode可以把字典的数据转换为url编码的数据

    form urllib import parse
    
    data = {"key":"value"}
    
    url_encode = parse.urlencode(data)
    
    print(url_encode)

    parse_qs函数

    将经过编码后的数据再次进行解码。

    form urllib import parse
    
    data = {"key":"value"}
    
    url_encode = parse.urlencode(data)
    
    url_decode = parse.parse_qs(url_encode)
    
    print(url_decode)

    urlparse和urlsplit

    有的时候,我们从页面上拿到一个url,想对这个url进行一个分割,取出某一部分什么的。就可以使用urlparse和urlsplit这些啦

    from urllib import request,parse
    
    url = 'http://www.baidu.com/s?username=zhiliao'
    
    result = parse.urlsplit(url)
    # result = parse.urlparse(url)
    
    print('scheme:',result.scheme)
    print('netloc:',result.netloc)
    print('path:',result.path)

    urlparse和urlsplit几乎是一模一样的,唯一不同的就是urlparse中多了一个params属性,这个不常用。

    request.Request

    还记得在充电中说的请求头吗,如果你想在请求的过程中加上这些请求头,那么你就不得不使用这个request.Request类来实现了。

    from urllib import request
    
    headers  = {
      "User-Agent":""  
    }
    req = request.Request("URL",headers=headers)
    resp = request.urlopen(req)
    
    print(resp.read())

     ProxyHandler代理设置

    我们制作的爬虫有时候为了爬取更多的数据,有可能会对对方的服务器造成很大的压力。所以,一些网站就专门针对爬虫做了一些防范措施,之前的user-agents是一个,一个Ip访问次数过多也会被禁止,这也是一种防爬机制,所以我们可能会找一些代理IP,当自己的IP无法使用的时候,换一个IP重新使用

    form urllib import request
    
    handler = requet.ProxyHandler({"代理的协议(http或者https)":"代理IP+端口"})
    
    opener = request.build_opener(handler)
    
    req = request.Request("请求的URL")
    resp = opener.open(req)
    
    print(resp.read())

    COOKIE的获取和使用

    cookie的格式:

    Set-Cookie:NAME=VALUE:Expires/Max-age=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

    • NAME:cookie的名字
    • VALUE:cookie的值
    • Expires:cookie的过期时间,时间一到,浏览器会自动清除
    • Path:cookie作用的路劲
    • Domain:cookie作用的域名
    • SECURE:是否只在https协议下起作用

    使用cookielib库和HTTPCookieProcessor模拟登录

  • 相关阅读:
    2018左其盛差评榜(截至10月31日)
    4星|《环球科学》2018年10月号:习惯悬崖上生活的游隼现在开心地在摩天大楼上捕食鸽子
    4星|《财经》2018年第25期:中国的五大主要城市群具备“大、快、活”三个独特优势
    2018左其盛好书榜(截至10月31日)
    4星|《门口的野蛮人1》:1988年惊动美国的一次杠杆收购事件
    在 ASP.NET Core 具体使用文档
    .Net Core 部署到 CentOS7 64 位系统中的步骤
    [Linux/Ubuntu] vi/vim 使用方法讲解
    CentOS7使用httpd apache 和firewalld打开关闭防火墙与端口
    Linux软件管理器(如何使用软件管理器来管理软件)2---安装及管理Linux应用程序
  • 原文地址:https://www.cnblogs.com/smiling-crying/p/9352382.html
Copyright © 2020-2023  润新知