爬虫最新的库requests-html库总结
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我们可以看到他是继承
BaseSessionctrl左键进入
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库总结的更多相关文章
- 爬虫入门系列(二):优雅的HTTP库requests
在系列文章的第一篇中介绍了 HTTP 协议,Python 提供了很多模块来基于 HTTP 协议的网络编程,urllib.urllib2.urllib3.httplib.httplib2,都是和 HTT ...
- 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
[网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院 欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...
- (转)Python爬虫利器一之Requests库的用法
官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结.要了解更多可以参考 官方文档 安装 利用 pip 安装 $ pip install requests 或者利用 easy_install ...
- 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍
爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,load ...
- Python爬虫利器一之Requests库的用法
前言 之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来 ...
- 网络爬虫必备知识之requests库
就库的范围,个人认为网络爬虫必备库知识包括urllib.requests.re.BeautifulSoup.concurrent.futures,接下来将结对requests库的使用方法进行总结 1. ...
- Python:requests库、BeautifulSoup4库的基本使用(实现简单的网络爬虫)
Python:requests库.BeautifulSoup4库的基本使用(实现简单的网络爬虫) 一.requests库的基本使用 requests是python语言编写的简单易用的HTTP库,使用起 ...
- 从0开始学爬虫12之使用requests库基本认证
从0开始学爬虫12之使用requests库基本认证 此处我们使用github的token进行简单测试验证 # coding=utf-8 import requests BASE_URL = " ...
- 从0开始学爬虫11之使用requests库下载图片
从0开始学爬虫11之使用requests库下载图片 # coding=utf-8 import requests def download_imgage(): ''' demo: 下载图片 ''' h ...
- 爬虫(一)—— 请求库(一)requests请求库
目录 requests请求库 爬虫:爬取.解析.存储 一.请求 二.响应 三.简单爬虫 四.requests高级用法 五.session方法(建议使用) 六.selenium模块 requests请求 ...
随机推荐
- 重载和重写的区别?构造器 Contructor 构造器是否可被 override?
重载 发生在同一类,方法名必须相同,参数类型不同,顺序不同,类型不同,方法返回值和返回类型可以不同 重写 发生在子父类,方法名.参数名参数列表必须相同.返回值范围小于等于父类,抛出异常范围小于等于父类 ...
- HA Joker Vulnhub Walkthrough
下载地址: https://www.vulnhub.com/entry/ha-joker,379/ 主机扫描: ╰─ nmap -p- -sV -oA scan 10.10.202.132Starti ...
- 查询BPC动态表
今天BASIS说后台有张数据表(/1CPMB/ABLBCAD)数据量已超过20亿,需要归档,但是不清楚是哪个业务模型. 有两种方式可以查询BPC动态生成的表名. (1)根据命名规则 环境前缀:apps ...
- 百度大脑UNIT3.0智能对话技术全面解析
智能客服.智能家居.智能助手.智能车机.智能政务……赋予产品智能对话能力是提升产品智能化体验.高效服务的重要手段,已经开始被越来越多的企业关注并布局.然而,智能对话系统搭建涉及NLP.知识图谱.语音等 ...
- Linux Bash文本操作之sed篇其一
作为Linux系统中文本处理的强力工具之一,sed功能强大,用法多变,值得我们好好学习. sed是用于过滤和转换文本的流编辑器. 一般情况下sed把当前处理的行存储在临时缓冲区,按指定命令处理之后将缓 ...
- AoE 搭档 TensorFlow Lite ,让终端侧 AI 开发变得更加简单。
AoE( AI on Edge , https://github.com/didi/AoE ) 是滴滴近期开源的终端侧 AI 集成运行时环境 ( IRE ). 随着人工智能技术快速发展,近几年涌现出了 ...
- DotNet Core中使用RabbitMQ
上一篇随笔记录到RabbitMQ的安装,安装完成,我们就开始使用吧. RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协 ...
- Vue-Cli 3.0 中配置高德地图
vue 中使用高德地图有两种方式 一.vue-amap 组件 官网: https://elemefe.github.io/vue-amap/#/ 开始的时候是打算用这个组件做地图功能的,但是尝试之后存 ...
- LeetCode刷题191126
博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教.题目及解法来自于力扣(LeetCode),传送门. 今天状态不好,划水第二天. 算法: 题号:20 给定一个只包括 '(', ...
- OpenTSDB 简单使用 .NET
OpenTSDB是基于Hbase的时序数据库[时间序列数据库].不具备通用性,主要针对具有时间特性和需求的数据,如监控数据.温度变化数据等. 1.安装OpenTSDB 安装前一定要安装HBase,相关 ...