• 网络爬虫(三)


    在上一节中我们知道了URLopen()可以实现最基本的爬虫请求:

    但是几个参数根本不足以构建完整的请求。假如需要在请求中假如Header等信息,就可以尝试利用更加强大的Request类来进行构建。

    下面的例子是一个用法:

    # -*- coding:UTF-8 -*-
    __autor__ = 'zhouli'
    __date__ = '2018/6/17 12:02'
    import urllib.request
    request = urllib.request.Request('https://python.org')
    response = urllib.request.urlopen(request)
    print(response.read().decode('utf-8'))

    这一次我们依旧是用urlopen来发送请求,但是不同的是,我们请求的不是url了,而是一个request对象,,来看下Request的源码吧

    class Request:
    
        def __init__(self, url, data=None, headers={},
                     origin_req_host=None, unverifiable=False,
                     method=None):

    第一个参数是url:必传参数,其他的都是可选参数。

    第二个参数data:如果需要传参就必须是传bytes(字节流)类型的。如果他是字典,可以先用urllib.parse模块的urlencode()编码。

    data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf-8')  # parse是用来处理URL,比如拆分和解析、合并等

    第三个参数:Headers是一个字典,他就是传说中的请求头,可以再构造请求的时候通过headers参数直接构造,当然也可以通过请求实例的add_header()方法添加。

    添加请求头最常见的用法就是修改user-Agent来伪装浏览器,默认的User-Agent是python-urllib,我们可以通过修改它来伪装成浏览器,假设伪装为火狐:

    Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11

    第四个参数:是用来指定host名称和IP地址。

    第五个参数:unverifiable来表示这个请求是否是无法验证的,默认为false,意思就是用户没有足够的权限来选择接受这个请求的结果。例如,我们请求一个HTML的文档中的图片,但是我们没有自动抓取图像的权限。,那么这时unverifiable的值为true。

    第六个参数:method就是一个字符串,用来请求使用的方法,就是GET,POST,PUT等

    下面传入多个参数的例子:

    from urllib import request, parse
    url = 'http://www.dyy88.com/post'
    headers = {
        'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
        'Host': 'http://www.dyy88.com'
    }
    dict = {
        'name': 'Germey'
    }
    data = bytes(parse.urlencode(dict), encoding='utf-8')
    req = request.Request(url=url, data=data, headers=headers, method='POST')
    response = request.urlopen(req)
    print(response.read().decode('utf-8'))

    网址是我瞎编的,大家随意换一下即可试一下

     解析链接:urlparse()

    from urllib.parse import urlparse
    result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
    print(type(result), result)

    结果如下:

    <class 'urllib.parse.ParseResult'> ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

    可以看到,返回的是一种ParseResult类型的对象,它包含6个部分,分别是scheme, netloc,path,params,query,和fragment。

    其实这个方法是将url分为6个部分,://前面的就是scheme代表协议,第一个/前面的就是netioc,就是域名,后面是path,后面是parms代表参数,问号?之后的是查询条件query,一般作用于GET类型的URL,井号#后面是锚点,用于定位页面内部的下拉位置。

    scheme://netloc/path;params?query#fragment这个就是一个标准的连接格式。

    反之有urlunparse()

    from urllib.parse import urlunparse
    data = ['http', 'www.baidu.com', '/index.html', 'user', 'id=5', 'comment']
    result = urlunparse(data)
    print(type(result), result)

    需要注意的是,data的数据长度必须是6,否则会报错。

    好了了解就此停止吧。下一节介绍requests库。

    没有过不去的坎,只有没加够的油!
  • 相关阅读:
    2.4 Image Sampling and Quantization
    3.3 Histogram Processing
    2.6 Basic Mathematical Tools
    3.1 Background
    2.5 Some Basic Realtionship Between Pixels
    3.4 Fundamentals of Spatial Filtering
    3.5 Smoothing(Lowpass)Spatial Filters
    pytorch和tensorflow安装
    池化层
    tensorboard之图可视化
  • 原文地址:https://www.cnblogs.com/zhoulixiansen/p/9218498.html
Copyright © 2020-2023  润新知