-为什么使用Requests库?
Python的标准库中 urllib 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,Requests 继承了urllib的所有特性,并且API使用更加方便,可以简化我们的代码
Requests使用
- *
安装*:pip3 install requests
请求方法格式
`GET方式请求
url = 'http://www.baidu.com'
headers = {
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}
response = requests.get(url=url,headers=headers,params=None)
print(response.status_code)
print(response.headers)
```....
- params跟的是get请求url地址后?号后面拼接的参数
响应的结果处理如下
* response.text 返回解码后的字符串
* * respones.content 以字节形式(二进制)返回。
* * response.status_code 响应状态码
* * response.request.headers 请求的请求头
* * response.headers 响应头
* * response.encoding = 'utf-8' 可以设置编码类型
* * response.encoding 获取当前的编码
* * response.json() 内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
POST请求格式
import requests
form_data = {
'username':'12345678910',
'password':'zn123456'
}
url = 'http://127.0.0.1:8000/api/login/'
headers = {
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}
response=requests.post(data=form_data,url=url,headers=headers)
print(response.text)
print(response.status_code)
print(response.json()['token'])
文件上传
import requests
#文件上传
url = 'https://httpbin.org/post'
files = {'file':open('page.html','r')}
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
}
# files: (optional) Dictionary
response = requests.post(url=url,files=files,headers=headers)
if response.status_code == 200:
print(response.text)`
dds
设置代理
只需要在请求中添加
# 设置代理
# proxies = {
# 'http':'192.168.2.111:8082',
#
#
}response=requests.get(url=url,params=None,headers=headers,verify=False,proxies=proxies)
session
# session:在requests请求中,我们旺旺需要让上下请求保持联系,
# 这是我们就需要使用session
import requests
# 实力化session对象
session = requests.session()
headers={
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}
response=session.get('http://www.baidu.com',headers=headers)
print(response.headers)
# session.cookies保存的是服务器,返回cookies信息
print(session.cookies)
# 当session.cookies有用户信息之后,我们在使用session.get()或者session.post
# 发起请求时,自动会携带cookies等信息
session.get('http://www.baidu.com',headers=headers)
# 一般情况下,我们会在模拟登录时用到requests.session,完成登录
# 然后使用session发起请求
认证证书
- #如果出现了证书认证ssl ca证书错误
#verify:Defaults toTrue
,默认为true,表示进行证书认证
#如果出现了证书认证ssl ca证书错误修改verify为False,表示忽略证书认证
请求相关参数总结
-
**:param method: 设置请求的方式.
-
**:param url: 请求的url地址.
-
** :param params: (optional) Dictionary get请求后面拼接的参数
-
:param data: (optional) Dictionary ,post请求提交的数据
-
:param json: (optional) json data 要求是一个json数据,等价与data参数的作用
-
:param headers: (optional) Dictionary 设置请求头
-
:param cookies: (optional) Dict or CookieJar object 模拟用户登录的时候
-
:param files: (optional) Dictionary 上传文件
-
.:param auth: (optional) Auth tuple web客户端认证auth(账号,密码)
-
:param timeout: (optional) 设置请求超时时间
-
:param allow_redirects: (optional) Boolean. Defaults to
True
.是否允许重定向 -
:param proxies: (optional) Dictionary 设置代理.
-
:param verify: Defaults to
True
,ssl证书认证,默认为True,表示进行证书验证**
XPath总结
什么是xpath
- XPath即为XML路径语言(XML Path Language),它是一种用来在XML文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行搜索,同样也适用于HTML。
-
XML
XML 是一种标记语言,很类似 HTML**
XML 的设计宗旨是传输数据,而非显示数据
XML 的标签需要我们自行定义。
常用的路径表达式
nodename 选取此节点的所有子节点。
/ 从当前节点选取直接子节点
// 从当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
…选取当前节点的父节点。
@ 选取属性。
//title | //price 选取文档中的所有 title 和 price 元素。
使用xpath
导入xpath
from lxml import etree
#先构造一个xpath解析对象
html = etree.HTML(html) #构造一个Xpath解析对像,并且自动修正HTML文本
text() 获取标签文本
@属性名 获取标签属性值