python爬虫企业级技术点_Python爬虫必备技术点(一)

爬虫必备技术

面向具有Python基础的Python爬虫爱好者,urllib和requests两个库在实际的项目中应用也非常广泛,不仅用于爬虫技术也可以应用在API接口调用方面。如果需要相关的案例可以加我QQ(610039018),另外我在B站上已发布了相关的爬虫视频(https://www.bilibili.com/video/av93731419)。

一、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

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

查找出文档中所有的1290180709494890496.htm标签元素

相对于当前节点

//table

假如当前节点是, 查找它的

1290180709494890496.htm的路径的写法

.//img

3.3 数据提取

提取文本

//title/text()

提取属性

//img/@href

3.4 位置条件

获取网页中的数据类型与字符集, 获取第一个标签

//meta[1]//@content

获取最后一个标签

//meta[last()]//@content

获取倒数第二个标签

//meta[position()-2]//@content

获取前三个标签

//meta[position()<3]//@content

3.5 属性条件

查找 class为circle-img的1290180709494890496.htm标签

//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对象的方法或属性

value = element.get('属性名')

text = element.text # 获取标签中文本,如千锋教育中的文本信息

children = element.xpath('相对xpath路径') # 获取它的子元素标签

四、考一考

写出urllib库的请求处理器有哪些类(尽量写全路径)

写出json.loads()和pickle.loads()返回的数据类型

写出pymysql的cursor.execute()方法中的参数及作用

把你们的答案可以写到评伦区,我会在后继统一回复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值