爬虫(基本知识介绍,urllib库的说明)

发布于:2025-04-17 ⋅ 阅读:(20) ⋅ 点赞:(0)

爬虫

爬虫基础(一些基本原理的梳理)

scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]

注: parameters 和 query 混用,并且现在 query 用的多

  • ?query 查询 ,用来查询某类资源,如果有多个查询,则用&隔开

https://www.baidu&ie=utf-8

  • fragment 片段 ,对资源描述的部分补充

  • 两个作用,Vue 和 React 都可以借助它来做路由管理/ 另外一个作用:用作HTML锚点

HTTP 下 加入 SSL 层 简称 HTTPS

SSL的主要作用

  • 建立一个安全通道,保证数据传输的安全性

  • 确认网站的真实性

网络相关的书籍 《计算机网络》 《图解HTTP》

  • 响应头

    • Date:用于标识响应产生的时间

    • Last-mModified:用于指定资源的最后修改时间

    • Content-Encoding:用于指定响应内容的编码

    • Serve:博阿寒服务器的信息,例如名称,版本号

    • Content-Type:文档类型,指定返回的数据是什么类型

      • text/html 返回HTML

      • application/x-javascript 返回 js

      • image/jpeg 返回图片

    • Set-Cookie:设置Cookie,响应头中的Set-Cookie用于告诉浏览器需要将此内容放在Cookie中,下次请求时将Cookie携带上

    • Expires:用于指定响应的国企时间,可以让代理服务器活浏览器将加载的内容更新到缓存中,当再次访问相同的内容时,就可以直接从缓存中加载,达到降低服务器负载,缩短加载时间的目的

css选择器

  • 要是各个选择器之间不加空格,则代表并列关系

    • div#container .wrapper

    • 选择的是 id为container 的 div 元素内部的class为wrapper的元素

爬虫概述:爬虫就是获取页面并提取和保存信息的自动化程序

Cookie和Session:Cookie和Session需要配合,一个在客户端,一个在服务端,二者共同协作,就实现了登录控制

代理:对于爬虫来说,使用代理就是为了隐藏自身IP,防止自身的IP被封锁

进程:可以理解为一个可以独立运行的程序单位

线程:是进程中的一个任务

线程是操作系统进行运算调度的最小单位,是经常中的最小运行单位

并发:宏观看起来是同时运行

并行:宏观和微观都是同时运行

基本库的使用

Request类和urlopen类相当于类库已经封装号的极其常用的请求方法

最基础的HTTP库

  • urllib

    • request (最基本的HTTP请求模块,只需url 和 额外参数)

      • urlopen() ----> 是一个类

        • data(参数) —> 要使用bytes方法将参数转换为字节流编码格式的内容,如果传递这个参数,它的请求方式将变成POST

        • timeout(参数)

        • url (参数,必填)

      • Request -------> 是一个类

        • url(参数,必填)

        • data(参数,必须传bytes类型的,如果是字典,先用urllib.parse中的urlencode方法进行编码)

        • headers (参数,是一个字典,可以通过headers参数直接构造此项,也可以通过调用请求实例的 add_header 方法添加)

        • origin-req-host(参数,指的是请求方的host名称或者IP地址)

        • method(参数,字符串参数,“GET”,“POST”…等)

    • reeor

    • parse

      • 一个工具模块,提供了URL的处理方法,例如拆分,解析,合并
    # 对于data数据的处理
    data = bytes(urllib.parse.urlencode({name':'germy'},encoding='utf-8')
    
    response = urllib.request.urlopen('url',data=data)
    print(response.read().decode('utf-8'))

    # timeout 和 reeor 的配合使用
    
    import urllib.request
    import urllib.error
    import socket
    try:
        response = urllib.request.urlopen('https://www.httpbin.org/post',timeout=0.1)
    except urllib.error.URLError as e:
        if isinstance(e.reason, socket.timeout):
            print

    import urllib.request
    
    request = urllib.request.Request('url')
    response = urllib.request.urlopen(request)
    # 此时urlopen的参数是Request类型的对象
    print(response.read().decode('utf-8'))

    # 使用Request类来发请求
    url = 'http://www.httpbin.org/post'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0',
        'Host':'www.httpbin.org'
    }
    dict = { 'name':'Germey'}
    data = bytes(urllib.parse.urlencode(dict), encoding='utf-8')
    req = request.Request(url, data, headers, method='POST')
    response = request.urlopen(req)
    print(response.read().decode('utf-8'))

高级用法

  • urllib.request 模块里的 BaseHandler 类,这是其他所有 HandLer 类的父类,提供了最基本的方法,default_openmprotocol_request

    • HTTPDefaultErroeHandler

      • 用于处理HTTP响应错误,所有错误都会抛出HTTPError类的错误
    • HTTPRedirectHandler

      • 处理重定向
    • HTTPCookieProcessor

      • 处理Cookie
    • ProxyHandler

      • 设置代理,默认为空
    • HTTPPasswordMgr

      • 用于管理密码
  • Opener类 ------> 帮助我们深入一层进行配置

    • 利用Handler类构建Opener类
    # 验证
    from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
    from urllib.error import URLError
    username = 'admin'
    password = 'admin'
    url = 'https://ssr3.scrape.center/'
    p = HTTPPasswordMgrWithDefaultRealm()
    p.add_password(None, url, username, password)
    auth_handler = HTTPBasicAuthHandler(p)
    opener = build_opener(auth_handler)
    try:
        result = opener.open(url)
        html = result.read().decode('utf-8')
        print(html)
    except URLError as e:
        print(e.reason)
    
    
    #设置代理
    
    from urllib.request import urlopen, ProxyHandler, build_opener
    from urllib.error import URLError
    proxy_handler = ProxyHandler({
        'http':'http://127.0.0.1:1080',
        'https':'https://127.0.0.1:1080'
    })
    opener = build_opener(proxy_handler)
    try:
        response = opener.open('http://www.baidu.com')
        print(response.read())
    except URLError as e:
        print(e.reason)
    
    
    # 获取Cookie
    import http.cookiejar,urllib.request
    
    cookie = http.cookiejar.CookieJar()
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    response = opener.open('http://www.baidu.com')
    for item in cookie:
        print(item.name + '=' + item.value)

handler配置好,然后用Opener类打开

  • 异常处理

以上当了解就好 urllib …

看了这么久,结果跟我说这个库不好用,啊啊啊啊!!!!我服了


网站公告

今日签到

点亮在社区的每一天
去签到