前言

requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html。之前解析html页面用过了lxml和bs4,

requests-html集成了一些常用爬虫库的优点,依然是为人类服务:HTML Parsing for Humans。

目前只支持python3.6

相关安装包版本

  • requests 2.22.0
  • requests-html 0.10.0
  • requests-toolbelt 0.8.0

环境准备

requests-html的GitHub地址https://github.com/kennethreitz/requests-html,使用pip就能直接安装了。

pip install requests-html==0.10.0

该库旨在使解析HTML(例如,抓取Web)尽可能简单直观, 有以下优势:

  • 完整的JavaScript支持!
  • CSS Selectors(又名jQuery风格,感谢PyQuery)。
  • XPath Selectors,对于胆小的人来说。
  • 模拟用户代理(如真实的Web浏览器)。
  • 自动跟踪重定向。
  • 连接池和cookie持久性。
  • 令人欣喜的请求体验,具有神奇的解析能力。
  • 异步支持

抓页面url地址

先发个get请求,返回response对象,通过r.html.links获取页面的全部链接,包含一些相对路径的地址,如果只想获取绝对路径的地址,可以用r.html.absolute_links

from requests_html import HTMLSession
session = HTMLSession() r = session.get('https://python.org/') # 获取页面上的所有链接
all_links = r.html.links
print(all_links) # 绝对路径链接
all_absolute_links = r.html.absolute_links
print(all_absolute_links)

运行结果, 返回内容太多,省略了一部分:

{'http://pycon.blogspot.com/', '/community/', 'http://python.org/dev/peps/', '/events/python-events/831/', , 'http://www.scipy.org'}
{'http://pycon.blogspot.com/', 'https://www.python.org/dev/', 'https://wiki.qt.io/PySide', 'https://www.python.org/events/python-events/817/'}

从返回的结果可以看出,返回的是set集合,会自动的去除重复的链接地址

xpath定位

用过lxml库的小伙伴应该知道https://www.cnblogs.com/yoyoketang/p/9661273.html,lxml可以支持xpath查找元素对象,requests-html也可以完美的支持xpath

接下来我需要获取目标网站:https://www.cnblogs.com/yoyoketang/tag/django/, 获取所有的文章标题,xpath语法:.//*[@id='myposts']/div/div/a

参考代码

from requests_html import HTMLSession
session = HTMLSession() r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/')
# 只获取第一个
f = r.html.xpath(".//*[@id='myposts']/div/div/a", first=True).text
print(f) # 获取全部
all = r.html.xpath(".//*[@id='myposts']/div/div/a")
for i in all:
print(i.text) # 获取文本
print(i.absolute_links) # 获取链接

运行结果

python测试开发django-49.allow_tags和mark_safe
python测试开发django-49.allow_tags和mark_safe
{'https://www.cnblogs.com/yoyoketang/p/10659137.html'}
python测试开发django-48.xadmin上传图片django-stdimage
{'https://www.cnblogs.com/yoyoketang/p/10655601.html'}
python测试开发django-47.xadmin上传图片和文件
{'https://www.cnblogs.com/yoyoketang/p/10653878.html'}

xpath方法返回是一个list,加上 first=True参数返回第一个结果

css定位支持

requests-html同样支持CSS Selector的方法,把上面案例用css定位也可以实现同样效果

from requests_html import HTMLSession
session = HTMLSession() r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/')
# 只获取第一个 css语法
f = r.html.find(".PostList>div>a", first=True).text
print(f) # 获取全部 css语法
all = r.html.find(".PostList>div>a")
for i in all:
print(i.text) # 获取文本
print(i.absolute_links) # 获取链接

其它方法

from requests_html import HTMLSession
session = HTMLSession() r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/') about = r.html.find(".PostList>div", first=True) # 1.获取文本
print(about.text) # 2.获取html内容
print(about.html) # 3.获取全部属性
print(about.attrs) # 4.获取链接
print(about.absolute_links ) # 5.搜索文字
print(about.search('python测试开发{}和mark_safe')[0]) # 6.继续定位子元素
print(about.find('a')) # 返回list element对象 # 7.containing 模糊匹配 只包含'django'文本的对象
a = about.find('a', containing='django')
print(a)

运行结果

python测试开发django-49.allow_tags和mark_safe
<div class="postTitl2"><a href="https://www.cnblogs.com/yoyoketang/p/10659137.html" id="PostsList1_rpPosts_TitleUrl_0">python测试开发django-49.allow_tags和mark_safe</a></div>
{'class': ('postTitl2',)}
{'https://www.cnblogs.com/yoyoketang/p/10659137.html'}
django-49.allow_tags
[<Element 'a' href='https://www.cnblogs.com/yoyoketang/p/10659137.html' id='PostsList1_rpPosts_TitleUrl_0'>]
[<Element 'a' href='https://www.cnblogs.com/yoyoketang/p/10659137.html' id='PostsList1_rpPosts_TitleUrl_0'>]

这些只是一些基本的功能,requests-html还可以支持JavaScript渲染页面,看下一篇python接口自动化29-requests-html支持JavaScript渲染页面

python接口自动化28-requests-html爬虫框架的更多相关文章

  1. python接口自动化:requests+ddt+htmltestrunner数据驱动框架

    该框架分为四个包:xc_datas.xc_driven.xc_report.xc_tools. xc_datas:存放数据,xc_driven:存放执行程序,xc_report:存放生成的报告,xc_ ...

  2. python接口自动化测试之requests库详解

    前言 说到python发送HTTP请求进行接口自动化测试,脑子里第一个闪过的可能就是requests库了,当然python有很多模块可以发送HTTP请求,包括原生的模块http.client,urll ...

  3. Python接口自动化【requests处理Token请求】

    首先说一下使用python模拟登录或注册时,对于带token的页面怎么登录注册模拟的思路: 1.对于带token的页面,需要先从最开始的页面获取合法token 2.然后使用获取到的合法token进行后 ...

  4. python接口自动化24-有token的接口项目使用unittest框架设计

    获取token 在做接口自动化的时候,经常会遇到多个用例需要用同一个参数token,并且这些测试用例跨.py脚本了. 一般token只需要获取一次就行了,然后其它使用unittest框架的测试用例全部 ...

  5. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  6. python接口自动化-Cookie_绕过验证码登录

    前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...

  7. python接口自动化-参数化

    原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...

  8. python接口自动化 -参数关联(一)

    原文地址https://www.cnblogs.com/yoyoketang/p/6886610.html 原文地址https://www.cnblogs.com/yoyoketang/ 原文地址ht ...

  9. python接口自动化20-requests获取响应时间(elapsed)与超时(timeout)

    前言 requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的. 如果服务端没及时响应,也不能一直等着,可以设置一个timeout超时的时间 关于reques ...

随机推荐

  1. 用命令打开本地tomcat服务器

    1.点击开始菜单,搜索cmd,默认第一个结果是cmd.exe, 鼠标右键用管理员权限打开(win7及以上版本系统) 启动命令是net start tomcat8 (我电脑是tomcat8,如果是tom ...

  2. Linux下进程/程序网络带宽占用情况查看工具 -- NetHogs

    http://www.vpser.net/manage/nethogs.html   来自.  最后略有修改 之前VPS侦探曾经介绍过流量带宽相关的工具如:iftop.vnstat,这几个都是统计和监 ...

  3. Golang依赖管理工具:glide从入门到精通使用

    这是一个创建于 2017-07-22 05:33:09 的文章,其中的信息可能已经有所发展或是发生改变. 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰 ...

  4. HTML5事件—visibilitychange 页面可见性改变事件

    转:https://blog.csdn.net/yusirxiaer/article/details/73480916 又看到一个很有意思的HTML5事件 visibilitychange事件是浏览器 ...

  5. LINUX-CUDA版本所对应的NVIDIA驱动版本号,cuda版本报错的朋友参考一下

    CUDA 10.0: 410.48 CUDA .xx CUDA .xx (update) CUDA .xx CUDA .xx (GA2) CUDA .4x CUDA .xx CUDA .xx CUDA ...

  6. exe4j中"this executable was created with an evaluation version exe4j"的解决

    在使用exe4j时,如果您的exe4j没有注册,在运行有exe4j转换的*.jar为*.exe的可执行文件时,会提示:"this executable was created with an ...

  7. python 全栈开发,Day134(爬虫系列之第1章-requests模块)

    一.爬虫系列之第1章-requests模块 爬虫简介 概述 近年来,随着网络应用的逐渐扩展和深入,如何高效的获取网上数据成为了无数公司和个人的追求,在大数据时代,谁掌握了更多的数据,谁就可以获得更高的 ...

  8. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)

    昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...

  9. RabbitMQ(一):RabbitMQ 安装与配置(Mac)

    一.rabbitmq 安装与配置 安装: brew install rabbitmq # 进入安装目录 cd /usr/local/Cellar/rabbitmq/3.7.12 # 启动 brew s ...

  10. ***LANMP镜像手册(Apache&Nginx)-lanmp-oneinstack

    LANMP镜像手册(Apache&Nginx) Version PHP7.0.26  转自:http://docs.websoft9.com/xdocs/lanmp-oneinstack-im ...