requests-html是比较新的爬虫库,作者和requests是同一个作者

一.安装依赖

pip install requests-html

我们可以在安装的时候看到他安装了lxml,reuqests,bs4......我们常用的解析和爬取的库都分装在他里面

二. 发起请求

from requests_html import HTMLSession
session = HTMLSession() #用法和requests.session实例化的对象用法一模一样,也会自动保存返回信息
#相比reuqests,他多了对于response.html这个属性

注意点:发默认发送的的是无头浏览器,且他如果用render调用浏览器内核

1.解决无头浏览器(针对反爬,如果没有做反爬无所谓)

修改源码

  • ctrl左键进入HTMLSession

  • 我们可以看到他是继承BaseSession

  • ctrl左键进入BaseSession

    原来的源码

    class BaseSession(requests.Session):
    def __init__(self, mock_browser : bool = True, verify : bool = True,
    browser_args : list = ['--no-sandbox']):
    super().__init__()
    if mock_browser:
    self.headers['User-Agent'] = user_agent() self.hooks['response'].append(self.response_hook)
    self.verify = verify self.__browser_args = browser_args
    self.__headless = headless #中间没用的省略掉不是删掉
    @property
    async def browser(self):
    if not hasattr(self, "_browser"):
    self._browser = await pyppeteer.launch(ignoreHTTPSErrors=not(self.verify), headless=True, args=self.__browser_args) return self._browser

    修改后的源码

    class BaseSession(requests.Session):
    """ A consumable session, for cookie persistence and connection pooling,
    amongst other things.
    """ def __init__(self, mock_browser : bool = True, verify : bool = True,
    browser_args : list = ['--no-sandbox'],headless=False): #如果你设置成True他就是无头,且你再运行render时候不会弹出浏览器
    super().__init__() # Mock a web browser's user agent.
    if mock_browser:
    self.headers['User-Agent'] = user_agent() self.hooks['response'].append(self.response_hook)
    self.verify = verify self.__browser_args = browser_args
    self.__headless = headless
    #中间没用的省略掉不是删掉
    @property
    async def browser(self):
    if not hasattr(self, "_browser"):
    self._browser = await pyppeteer.launch(ignoreHTTPSErrors=not(self.verify), headless=self.__headless, args=self.__browser_args) return self._browser

    其实我就做了个处理方便传一个headless进去

对于session重新设置

from requests_html import HTMLSession
session = HTMLSession(
browser_args=['--no-sand',
'--user-agent='xxxxx'
]
)
#这样你就可以直接定义他是什么浏览器发送请求啦

2.解决浏览器内核(针对反爬,如果没有做反爬无所谓)

#利用模块进行js注入
from requests_html import HTMLSession session =HTMLSession(.....)
response = session.get('https://www.baidu.com')
script='''
()=>{
Object.defineProperties(navigator,{
webdriver:{
get: () => undefined
}
})}'''
print(response.html.render(script=script))

三.response.html相关属性

这里的response对象是

from requests_html  import HTMLSession
session =HTMLSession()
response = session.get('https://www.baidu.com')
#为了大家好理解就这个response

1.absolute_links

所有的路径都会转成绝对路径返回

2.links

返还路径原样

3.base_url

.base标签里的路径,如果没有base标签,就是当前url

4.html

返回字符串字符串内包含有标签

5.text

返回字符串字符串内不包含有标签爬取什么小说新闻之类的超级好用!

6.encoding

解码格式,注意这里是response.html的encoding,你如果只只设置了response.encoding对这个encoding毫无影响

7.raw_html

相当于r.content返回二进制

8.pq

返回PyQuery对象,个人不怎么用这个库所有不写结论

四.response.html相关方法

下面response对象我就简写成 r了

1.find

用css选择器找对象

获取全部

语法:r.html.find('css选择器')

返回值:[element对象1,。。。。。] 是个列表

只获取第一个

语法`:r.html.find('css选择器',first = True)

返回值:element对象

2.xpath

用xpath选择器找对象

获取全部

语法:r.html.xpath('xpath选择器')

返回值:[Element对象1,。。。。。] 是列表

只获取第一个

语法`:r.html.xpath('xpath选择器',first = True)

返回值:Element对象

3.search(只获取第一个)

类似用正则匹配,就是把正则里面的(.*?)变成{}

语法:r.html.search(‘模板’)

模板一:('xx{}xxx{}')

获取:获取第一个:r.html.search(‘模板’)[0]其他以此类推

模板二:(‘xxx{name}yyy{pwd}’)

获取:获取第一个:r.html.search(‘模板’)['name']其他以此类推

4.search_all(获取全部)

用法和search一样

返回值: 【result对象,result对象,】

5.render(这个我后续单独写一个总结内容有点多)

他其实就是封装了pyppeteer你如果不了解pyppeteer,那可以想想Selenium就是模拟浏览器访问

五.Element对象方法及属性

  • absolute_links:绝对url
  • links:相对url
  • text:只显示文本
  • html:标签也会显示
  • attrs:属性
  • find('css选择器')
  • xpath('xapth路径')
  • .search('模板')
  • .search_all('模板')

爬虫最新的库requests-html库总结的更多相关文章

  1. 爬虫入门系列(二):优雅的HTTP库requests

    在系列文章的第一篇中介绍了 HTTP 协议,Python 提供了很多模块来基于 HTTP 协议的网络编程,urllib.urllib2.urllib3.httplib.httplib2,都是和 HTT ...

  2. 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用

    [网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院  欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...

  3. (转)Python爬虫利器一之Requests库的用法

    官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结.要了解更多可以参考 官方文档 安装 利用 pip 安装 $ pip install requests 或者利用 easy_install ...

  4. 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍

    爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...

  5. Python爬虫利器一之Requests库的用法

    前言 之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来 ...

  6. 网络爬虫必备知识之requests库

    就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结对requests库的使用方法进行总结 1. ...

  7. Python:requests库、BeautifulSoup4库的基本使用(实现简单的网络爬虫)

    Python:requests库.BeautifulSoup4库的基本使用(实现简单的网络爬虫) 一.requests库的基本使用 requests是python语言编写的简单易用的HTTP库,使用起 ...

  8. 从0开始学爬虫12之使用requests库基本认证

    从0开始学爬虫12之使用requests库基本认证 此处我们使用github的token进行简单测试验证 # coding=utf-8 import requests BASE_URL = " ...

  9. 从0开始学爬虫11之使用requests库下载图片

    从0开始学爬虫11之使用requests库下载图片 # coding=utf-8 import requests def download_imgage(): ''' demo: 下载图片 ''' h ...

  10. 爬虫(一)—— 请求库(一)requests请求库

    目录 requests请求库 爬虫:爬取.解析.存储 一.请求 二.响应 三.简单爬虫 四.requests高级用法 五.session方法(建议使用) 六.selenium模块 requests请求 ...

随机推荐

  1. 域控权限提升PTH攻击

    0x01 漏洞利用条件 1.被pth攻击的计算机未打补丁(KB2871997)2.拿到一台域成员主机并且拿到管理员组的域用户的NTML 3.对方主机存在相同账号并且是管理员组成员 0x02 本地用户N ...

  2. selenium的安装、报错和解决

      selenium是的作用是模拟点击浏览器上的按钮,配合一个无头浏览器就可以快速解决一些前端需要加解密的功能. 第一步pip install selenium安装的第一步就是用pip把模块下载回来. ...

  3. iOS核心动画高级技巧-5

    9. 图层时间 图层时间 时间和空间最大的区别在于,时间不能被复用 -- 弗斯特梅里克 在上面两章中,我们探讨了可以用CAAnimation和它的子类实现的多种图层动画.动画的发生是需要持续一段时间的 ...

  4. 1w+的心路历程

    鬼知道我是如何坚持下来的,如果非要找个理由,那或许是所谓的热爱. 公众号转眼间写了三年.写的内容围绕着安卓技术,源码剖析,生活感悟,职场人生. 很庆幸的是,得到大家的支持,每一条留言都会是一次交流,看 ...

  5. day07什么是方法、方法的定义、方法的调用

    复习 1.数组 1)什么是数组 数组就是一种能够保存 多个相同数据类型的数据的变量 2)为什么使用数组 3)数组的构成 3.1)数组名 3.2)数组元素 3.3)数组长度 3.4)数组下标 4)数组的 ...

  6. 计算几何 val.2

    目录 计算几何 val.2 几何单位结构体板子 旋转卡壳 基础概念 求法 模板 半平面交 前置芝士:线段交 S&I算法 模板 最小圆覆盖 随机增量法 时间复杂度 模板 后记 计算几何 val. ...

  7. 精通awk系列(15):awk数据类型和字面量

    回到: Linux系列文章 Shell系列文章 Awk系列文章 数据类型 gawk有两种基本的数据类型:数值和字符串.在gawk 4.2.0版本中,还支持第三种基本的数据类型:正则表达式类型. 数据是 ...

  8. WPF数据可视化-趋势图

    环境: 系统: Window 7以上: 工具:VS2013及以上. 研发语言及工程: C# WPF 应用程序 效果: ​ ​ 简介: 不需要调用第三方Dll, 仅仅在WPF中使用贝塞尔曲线,不到500 ...

  9. JQuery 常用网址

    http://www.bejson.com/apidoc/jquery/css.html  操作手册 https://jquery.com/   JQuery官网 一.JQuery插件的网站 1.ht ...

  10. 【Beta阶段】第十一周Scrum会议

    [Beta阶段]第十一周Scrum会议 本次会议为第十一周第一次Scrum Meeting,会议对上周工作进行了总结,并对工作成果予以了肯定. 会议时间为2019.11.28.会议地点为中国海洋大学北 ...