requsets请求方式和xpath解析器的基本用法

requests

Python的标准库中 urllib 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,Requests 继承了urllib的所有特性,并且API使用更加方便,可以简化我们的代码
首先安装
pip3 install requests
它有两种请求方式:getpost
get示例代码

url = "https://xueqiu.com/v4/statuses/public_timeline_by_category.json?"
#请求头
headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
}
response = requests.get(url=url,headers=headers)

post示例代码

  form_data = {
    'username':'17611317980',
    'password':'123456',
}

url = 'http://127.0.0.1:8000/api/login/'
headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
response = requests.post(url=url,data=form_data,headers=headers)

响应结果处理

#获取响应结果
response.text  #页面源码
response.status_code #状态码
response.headers #响应头
response.request.headers)#获取请求头
response.content) #获取页面的二进制数据
response.encoding = 'utf-8'   #可以设置编码类型
response.encoding  #获取当前的编码
#如果获取的是json字符串,可以调用json方法,将json字符串转换为python数据类型
response.json()

文件上传

url = 'https://httpbin.org/post'
#读取本地文件
files = {'file':open('page.html','r',encoding='gbk')}
response = requests.post(url=url,files=files,headers=headers)
if response.status_code == 200:
    print('文件上传成功')
    print(response.text)

设置代理

# url = 'https://www.baidu.com/'
url = 'https://httpbin.org/get'
headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
#proxy对应的可以是字典,列表或元组
proxy = {
	#设置网络代理
    'https': '60.190.250.120:8080',
    'http': '121.61.3.209:9999',
}
response = requests.get(url=url,headers=headers,proxies=proxy)

if response.status_code == 200:
    print('请求成功')
    print(response.text)

session会话保持

#session:在requests请求中,我们往往需要让上下请求保持联系,
#这时我们就需要使用session
import requests

#实例化session()对象
session = requests.session()

headers = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
response = session.get('http://www.baidu.com/',headers=headers)

print(response.headers)
print(session.cookies) #session.cookies 保存的是服务器,返回的cookies信息


#当session.cookies有用户信息之后,我们再使用session.get()或者session.post()
#发起请求时,就会自动携带cookies等信息
response = session.get('http://www.baidu.com/',headers=headers)


# 一般情况下,我们会再模拟登录时用到request.session,先完成登录,
# 然后使用session发起请求

处理HTTPS请求 (忽略)SSL证书验证

#如果出现了证书认证ssl ca证书错误
#verify:Defaults to ``True``,默认为true,表示进行证书认证
#如果出现了证书认证ssl ca证书错误修改verify为False,表示忽略证书认证
response = requests.get(url=url,headers=headers,verify=False)

请求相关参数

#请求参数分析
:param method: 设置请求方式 get、post、delete
:param url: 目标url
:param params: 跟的是get请求url地址后?后面拼接的参数
:param data: (optional) Dictionary, post请求的参数.
:param headers: (optional) Dictionary 设置请求头.
:param cookies: (optional) Dict or CookieJar object 设置用户的cookies信息.
:param files: (optional) Dictionary 文件上传(post).
:param auth:  Auth 认证.
:param timeout: 设置请求的超时时间
:param allow_redirects: 设置是否允许重定向,默认是允许的
:param proxies: (optional) Dictionary 设置代理.
:param verify: (optional) Either a boolean,  Defaults to ``True``.
#忽略证书认证,则设置为False

xpath解析

了解一下什么是xpath?

XPath即为XML路径语言(XML Path Language),
它是一种用来在XML文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行搜索,同样也适用于HTML。

上面提到了xml那么xml有是什么鬼呢?

那么看这里:
* XML 是一种标记语言,很类似 HTML
* XML 的设计宗旨是传输数据,而非显示数据
* XML 的标签需要我们自行定义。

好了了解完xml回到正题xpath的几种常见表达路径来看一下

表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
选取当前节点的父节点
@ 选取属性

不要着急 看一下怎么使用

from lxml import etree
html = etree.HTML(html) #构造一个Xpath解析对像,并且自动修正HTML文本
text() 获取标签文本
@属性名 获取标签属性值
属性多值匹配函数 contains(@class,'li')
ranks = etree_xpath.xpath('//div[@class="scores_List"]/dl')#根据div分组
        for dl in ranks:#遍历分组
            school_info = {}
            school_info['url'] = dl.xpath('./dt/a[1]/@href')
            school_info['icon'] =dl.xpath('./dt/a[1]/img/@src')
            school_info['name'] = dl.xpath('./dt/strong/a/text()')
上一篇:“驾驭requsets_html“_夜爬tom资讯


下一篇:javaweb:respone