新闻资讯

新闻资讯 行业动态

Python爬虫必备技术点(一)

编辑:006     时间:2020-03-13
爬虫必备技术

一、urllib总结

    核心的网络请求库 -> urllib

    urllib.request 模块

        urlopen(url | request: Request, data=None) data是bytes类型

        urlretrieve(url, filename) 下载url的资源到指定的文件

        build_opener(*handlder) 构造浏览器对象
            opener.open(url|request, data=None) 发起请求

        Request 构造请求的类

        url='https://www.baidu.com/s'
        data={
           'wd': '千锋'
        }
        urlencode(data)  # 结果转成'wd=%f5%e6%e6%f5%e6%e6'
        request = Request(url, data=urlencode(data).encode())

        HTTPHandler HTTP协议请求处理器

        ProxyHandler(proxies={‘http’: ‘http://proxy_ip:port’}) 代理处理

        HTTPCookieProcessor(CookieJar())
            http.cookiejar.CookieJar 类
    urllib.parse模块
        quote(txt) 将中文字符串转成url编码
        urlencode(query: dict) 将参数的字典转成url编码,结果是key=value&key=value形式,即以 application/x-www-form-urlencoded作为url编码类型。

二、requests库【重点】

requests库也是一个网络请求库, 基于urllib和urllib3封装的便捷使用的网络请求库。
2.1 安装环境

pip install requests -i https://mirrors.aliyun.com/pypi/simple

    1

2.2 核心的函数

    requests.request() 所有请求方法的基本方法
    以下是request()方法的参数说明
        method: str 指定请求方法, GET, POST, PUT, DELETE
        url: str 请求的资源接口(API),在RESTful规范中即是URI(统一资源标签识符)
        params: dict , 用于GET请求的查询参数(Query String params);
        data: dict , 用于POST/PUT/DELETE 请求的表单参数(Form Data)
        json: dict 用于上传json数据的参数, 封装到body(请求体)中。请求头的Content-Type默认设置为application/json
        files: dict, 结构 {‘name’: file-like-object | tuple}, 如果是tuple, 则有三种情况:
            (‘filename’, file-like-object)
            (‘filename’, file-like-object, content_type)
            (‘filename’, file-like-object, content_type, custom-headers)
            指定files用于上传文件, 一般使用post请求,默认请求头的Content-Type为multipart/form-data类型。
        headers/cookies : dict
        proxies: dict , 设置代理
        auth: tuple , 用于授权的用户名和口令, 形式(‘username’, ‘pwd’)
    requests.get() 发起GET请求, 查询数据
    可用参数:
        url
        params
        json
        headers/cookies/auth
    requests.post() 发起POST请求, 上传/添加数据
    可用参数:
        url
        data/files
        json
        headers/cookies/auth
    requests.put() 发起PUT请求, 修改或更新数据
    requests.patch() HTTP幂等性的问题,可能会出现重复处理, 不建议使用。用于更新数据
    requests.delete() 发起DELETE请求,删除数据

2.3 requests.Respose

以上的请求方法返回的对象类型是Response, 对象常用的属性如下:

    status_code 响应状态码
    url 请求的url
    headers : dict 响应的头, 相对于urllib的响应对象的getheaders(),但不包含cookie。
    cookies: 可迭代的对象,元素是Cookie类对象(name, value, path)
    text : 响应的文本信息
    content: 响应的字节数据
    encoding: 响应数据的编码字符集, 如utf-8, gbk, gb2312
    json(): 如果响应数据类型为application/json,则将响应的数据进行反序化成python的list或dict对象。
        扩展-javascript的序列化和反序列化
            JSON.stringify(obj) 序列化
            JSON.parse(text) 反序列化

三、数据解析方式之xpath

xpath属于xml/html解析数据的一种方式, 基于元素(Element)的树形结构(Node > Element)。选择某一元素时,根据元素的路径选择,如 /html/head/title获取
3.1 绝对路径

从根标签开始,按tree结构依次向下查询。
如 /html/body/table/tbody/tr。
3.2 相对路径

相对路径即是从当前某一个元素下开始查找,写法如下

    相对于整个文档
    //img
    查找出文档中所有的<img>标签元素
    相对于当前节点
    //table
    假如当前节点是, 查找它的的路径的写法
    .//img

3.3 数据提取

    提取文本
    //title/text()
    提取属性
    //img/@href

3.4 位置条件

    获取网页中的数据类型与字符集, 获取第一个<meta>标签
    //meta[1]//@content
    获取最后一个<meta>标签
    //meta[last()]//@content
    获取倒数第二个<meta>标签
    //meta[position()-2]//@content
    获取前三个<meta>标签
    //meta[position()<3]//@content

3.5 属性条件

    查找 class为circle-img的<img>标签
    //img[@class="circle-img"]

3.6 在Python中应用

首先要安装包pip install lxml,下面展示部分的代码片断:

from lxml import etree

root = etree.HTML('网页的内容')
element = root.xpath('xpath查找路径')
# element可能是两种类型,一是List=>[<Element>, <Element>...]
# 另一个是Element对象,下面是Element对象的方法或属性
value = element.get('属性名')
text = element.text # 获取标签中文本,如<span>千锋教育</span>中的文本信息
children = element.xpath('相对xpath路径') # 获取它的子元素标签

四、考一考

    写出urllib库的请求处理器有哪些类(尽量写全路径)
    写出json.loads()和pickle.loads()返回的数据类型
    写出pymysql的cursor.execute()方法中的参数及作用
————————————————
版权声明:本文为CSDN博主「Python-Disen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ahhqdyh/article/details/104788387
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐