requests-html模块

官方网站

Github网址

请求数据

from requests_html import HTMLSession

session = HTMLSession()

requests-html发出的请求是由session发出来的

发送Get请求

url  = 'https://baidu.com'
res= session.get(url = url)

发送post请求

url  = 'https://baidu.com'

res= session.post(url = url)

也可以使用request方法,指定GET,或者是POST参数来指定,这个使用方法就和使用requests中的session方法类封装的

url = 'http://ww.baidu.com'
res = session.request(method = 'GET',url = url)
print(res.html.html)

get方法和post还有request的方法和requests的模块中的方法一致,至于为什么,因为这两个模块是一个人写的

自定义HTML对象

from requests_html import HTML
doc = """<a href='https://httpbin.org'>""" html = HTML(html=doc)
print(html.links)
{'https://httpbin.org'}

HTML对象属性

url = 'https://www.zhihu.com/signin?next=%2F'
res = session.get(url = url)

ipython中检查res类型

In [15]: res
Out[15]: <Response [200]>
In [16]: type(res)
Out[16]: requests_html.HTMLResponse
In [17]: res.html
Out[17]: <HTML url='https://www.zhihu.com/signin?next=%2F'>

In [18]: type(res.html)
Out[18]: requests_html.HTML

可以看到requests_html.HTMLrequests_html.HTMLResponse 模块自己实现的类

In [19]: dir(res.html)
Out[20]:
['absolute_links', 'add_next_symbol', 'arender', 'base_url', 'default_encoding', 'element', 'encoding', 'find', 'full_text', 'html', 'links', 'lxml', 'next', 'next_symbol', 'page', 'pq', 'raw_html', 'render', 'search', 'search_all', 'session', 'skip_anchors', 'text', 'url', 'xpath]

除去掉模块内部封装的属性和方法之外有这么多的方法和属性,下面我们一步一步类进行介绍。

html对象属性

absolute_links

输入页面中的绝对路径,如果页内连接是相对路径也会被自动转换为绝对路径

url = 'https://www.zhihu.com/signin?next=%2F'
res = session.get(url = url)

这里我们请求知乎首页,可以底部检查网址,

In:res.html.absolute_links
Out:
{
'https://www.zhihu.com/app',
'https://www.zhihu.com/contact',
'https://www.zhihu.com/explore',
'https://www.zhihu.com/jubao',
'https://www.zhihu.com/org/signup',
'https://www.zhihu.com/question/waiting',
}

相对路径被转换为绝对路径

links

原样连接,页面中是绝对路径的输出就是绝对路径,是相对路径输出就是相对路径

In : res.html.links
Out:
{
'/app',
'/contact',
'/explore',
'/jubao',
'https://www.zhihu.com/org/signup',
'https://www.zhihu.com/term/privacy',
'https://www.zhihu.com/terms',
'}

base_url

​ 基础连接

html

返回响应页面的html代码

raw_html

返回页面的二进制流

text

输入响应中所有的文字,结果如下,

In [21]: res.html.text
Out[21]: '知乎 - 有问题,上知乎\n.u-safeAreaInset-top { height: constant(safe-area-inset-top) !important; height: env(safe-
area-inset-top) !important; } .u-safeAreaInset-bottom { height: constant(safe-area-inset-bottom) !important; height: env(safe-area-inset-bottom) !important; }\nif (window.requestAnimationFrame) { window.requestAnimationFrame(function() { window.FIRST_ANIMATION_FRAME = Date.now(); }); }\n首页\n发现\n等你来答\n登录加入知乎\n有问题,上知乎\n免密码登录\n密码登录\n获取短
信验证码\n接收语音验证码\n注册/登录\n未注册手机验证后自动登录\n注册即代表同意《知乎协议》《隐私保护指引》\n注册机构号\n社交
帐号登录\n微信\nQQ\nQQ\n微博\n下载知乎 App\n知乎专栏圆桌发现移动应用联系我们来知乎工作注册机构号\n© 2019 知乎京 ICP 证 1107
45 号京公网安备 11010802010035 号出版物经营许可证\n侵权举报网上有害信息举报专区儿童色情信息举报专区违法和不良信息举报:010-
82716601\n

encoding

字符编码

可以通过以下方法设置字符编码

res.html.encoding = 'gbk'

html对象方法

find

参数:

:param selector: css 选择器
:param clean: 是否去除页面中的<scpript>和<style>标签,默认False
:param containing:如果指定有值,只返回包含所给文本的Element对象,默认False
:param first: 是否返回第一个对象,默认False
:param _encoding: 字符编码

返回结果

[Element,Element……]
当First为True的时候,只返回第一个Element

xpath

:param selector: xpath 选择器
其他和find方法一致

search

res.html.search(xxx{}yyy)[0] // 只搜索一次

res.html.search(xxx{name}yyy{pwd}zzz)[name] // 只搜索一次

search_all

查找所有符合template对象,返回结果是result对象组成的list

Element对象

'absolute_links', 'attrs', 'base_url', 'default_encoding', 'element', 'encoding', 'find', 'full_text', 'html', 'lineno', 'links', 'lxml', 'pq', 'raw_html', 'search', 'search_all', 'session', 'skip_anchors', 'tag', 'text', 'url', 'xpath'

text

去掉 \r\n之后的文本

full_text

没有去掉\r\n之后的文本值

attrs

返回以字典的形式Element对象的属性和属性名,

request-html模块 (上)的更多相关文章

  1. python学习笔记五 模块上(基础篇)

    模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...

  2. Python进阶【第十篇】模块(上)

    ·一.模块 模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这 ...

  3. 003.2---asyncio模块(上)

    asyncio(上) asyncio 的几个概念 event_loop(事件循环):程序开启一个无线的循环,程序员会把一些函数(协程)注册到事件循环上,当满足事件发生的时候,调用相应的协程函数. co ...

  4. python基础===基于requests模块上的协程【trip】

    今天看博客get了一个有趣的模块,叫做 trip     #(pip install  trip) 兼容2.7版本 基于两大依赖包:TRIP: Tornado & Requests In Pa ...

  5. 跟我一起读postgresql源码(四)——Planer(查询规划模块)(上)

    时间一晃周末就过完了,时间过得太快,不由得让人倍加珍惜.时间真是不够用哈~ 好的不废话,这次我们开始看查询规划模块的源码吧. 查询规划部分的在整个查询处理模块应该是在一个非常重要的地位上,这一步直接决 ...

  6. Python multiprocess模块(上)

    multiprocess模块 一. Process模块介绍 1. 直接使用Process模块创建进程 (1)主进程和子进程 (2)if __name__ == "__main__" ...

  7. Python--day67--CBV和FBV、Request对象及上传文件示例

    1,CBV版添加新的出版社 views.py文件 urls.py文件 2,Request对象: request对象 当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpReques ...

  8. spring boot: filter/interceptor/aop在获取request/method参数上的区别(spring boot 2.3.1)

    一,filter/interceptor/aop在获取参数上有什么区别? 1,filter可以修改HttpServletRequest的参数(doFilter方法的功能), interceptor/a ...

  9. iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示

    一.上拉下拉注意事项 使用MJRefresh中的上拉控件自动设置透明 当请求下页数据通过page的时候,注意的是上拉加载更多数据失败的问题,下拉加载数据失败了,页数应该还原.或者是请求成功的时候再将页 ...

随机推荐

  1. (十四)访问标志 Access_flags

    一.概念 上一章节讲到了常量池,如下图,常量池之后便是访问标志acess_flags,占2个字节(u2). 二.例子 编写一个接口. public interface Test{ public fin ...

  2. 如何固定table表格宽度,样式不受容器影响

    之前有篇关于LODOP打印超文本表格,两个样式相同的表格,出现错位的情况.该博文地址:LODOP打印表格错位的几种情况该文试验了两种现象,第一种浏览器页面显示错位,打印预览也错位,第二种浏览器页面表格 ...

  3. 【linux基础-err】 tar命令-stdin: not in gzip format

    problem gzip: stdin: not in gzip format tar: Error is not recoverable: exiting now 解决方法 最后发现下载的压缩文件有 ...

  4. .mmap文件如何打开

    .mmap是一种思维导图文件的后缀,可以用Xmind软件打开.

  5. Python爬取网址中多个页面的信息

    通过上一篇博客了解到爬取数据的操作,但对于存在多个页面的网址来说,使用上一篇博客中的代码爬取下来的资料并不完整.接下来就是讲解该如何爬取之后的页面信息. 一.审查元素 鼠标移至页码处右键,选择检查元素 ...

  6. ubuntu18.04 阿里镜像源

    备份:cp /etc/apt/sources.list /etc/apt/sources.list.bak 清空source.list:echo > /etc/apt/sources.list ...

  7. QT 源码分析--1

    Ref: http://blog.sina.com.cn/s/blog_6e80f1390100qoc0.html 安装qt之后(我使用的是online自动安装),安装目录下有\5.10.1\Src\ ...

  8. 用Nacos做微服务架构里的服务注册与发现中心

    转自:https://www.jianshu.com/p/61608ff86344 Nacos 另一个非常重要的特性就是服务注册与发现,说到服务的注册与发现相信大家应该都不陌生,在微服务盛行的今天,服 ...

  9. Apache Flink SQL

    本篇核心目标是让大家概要了解一个完整的 Apache Flink SQL Job 的组成部分,以及 Apache Flink SQL 所提供的核心算子的语义,最后会应用 TumbleWindow 编写 ...

  10. LeetCode 1022. 从根到叶的二进制数之和(Sum of Root To Leaf Binary Numbers)

    1022. 从根到叶的二进制数之和 1022. Sum of Root To Leaf Binary Numbers 题目描述 Given a binary tree, each node has v ...