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. 函数知识总结(js)

    c语言中函数的形参必须定义类型,而且形参的个数和实参的个数必须相等.但是在js中形参不需要定义,在函数定义的小括号中只需要写形参名就可以了不用写var关键字,而且在函数调用时传入的实参可以和形参的个数 ...

  2. EFCore的外键级联删除导致的【可能会导致循环或多重级联路径】

    之前也是经常遇到这个问题,但好在每次创建的实体不多,很容易就能找到是哪个外键导致级联循环删除问题 之前都是这么处理,因为创建的实体也不多,所以还处理得来 但最近跟别人合作写后端,别人写了好多实体,我一 ...

  3. 爬虫(十):AJAX、爬取AJAX数据

    1. AJAX 1.1 什么是AJAX AJAX即“Asynchronous JavaScript And XML”(异步JavaScript和XML)可以使网页实现异步更新,就是不重新加载整个网页的 ...

  4. JavaScript实现动态轮播图效果

    功能描述: 1.鼠标经过 左右侧箭头显示,鼠标离开 箭头隐藏 2.动态添加底部小圆圈并绑定单击事件,并且让小圆圈的点击事件和左右箭头点击事件同步 3.拷贝第一张图片添加到ul最后可以实现动态添加图片 ...

  5. sshfs 相关材料索引

    这两天简单看了 sshfs 缓存相关的内容,下面对一些好的链接进行索引,防止以后忘了: OpenSSH: Difference between internal-sftp and sftp-serve ...

  6. 一篇文章看懂JS闭包,都要2020年了,你怎么能还不懂闭包?

     壹 ❀ 引 我觉得每一位JavaScript工作者都无法避免与闭包打交道,就算在实际开发中不使用但面试中被问及也是常态了.就我而言对于闭包的理解仅止步于一些概念,看到相关代码我知道这是个闭包,但闭包 ...

  7. IT兄弟连 HTML5教程 CSS3属性特效 文字排版

    direction定义文字排列方式,所有浏览器都兼容这个属性,有两个可选值rtl和ltr.文字排版的参数说明如表1所示. 表1  CSS3文字排版参数说明 上表所示,ltr是初始值,表示left-to ...

  8. LinuxProbe小结

    1.修改主机名: /etc/hostname 2.配置 yum 软件仓库: (1)进入到 /etc/yum.repos.d/目录下,创建一个linuxprobe.repo的新文件(文件名称任意,结尾必 ...

  9. 测试人员必备之 mysql 常用命令学习指南

    1.数据库连接 1.通过命令行连接数据库 [root@localhost ~]# mysql -u root -p Enter password: 输入以上命令,回车后输入密码,回车,出现 mysql ...

  10. try catch在for循环外面还是里面

    static void Main(string[] args) { //将异常写在循环外,出现异常循环终止 try { Console.WriteLine("抛出异常不输出"); ...