博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python接口自动化28-requests-html爬虫框架
阅读量:5259 次
发布时间:2019-06-14

本文共 3195 字,大约阅读时间需要 10 分钟。

前言

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

requests-html集成了一些常用爬虫库的优点,依然是为人类服务:HTML Parsing for Humans。
目前只支持python3.6

环境准备

requests-html的GitHub地址,使用pip就能直接安装了。

pip install requests-html

该库旨在使解析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 HTMLSessionsession = HTMLSession()r = session.get('https://python.org/')# 获取页面上的所有链接all_links = r.html.linksprint(all_links)# 绝对路径链接all_absolute_links = r.html.absolute_linksprint(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库的小伙伴应该知道,lxml可以支持xpath查找元素对象,requests-html也可以完美的支持xpath

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

1070438-20190406195754079-2071694848.png

参考代码

from requests_html import HTMLSessionsession = HTMLSession()r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/')# 只获取第一个f = r.html.xpath(".//*[@id='myposts']/div/div/a", first=True).textprint(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_safepython测试开发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 HTMLSessionsession = HTMLSession()r = session.get('https://www.cnblogs.com/yoyoketang/tag/django/')# 只获取第一个 css语法f = r.html.find(".PostList>div>a", first=True).textprint(f)# 获取全部 css语法all = r.html.find(".PostList>div>a")for i in all:    print(i.text)          # 获取文本    print(i.absolute_links)  # 获取链接

其它方法

from requests_html import HTMLSessionsession = 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
{'class': ('postTitl2',)}{'https://www.cnblogs.com/yoyoketang/p/10659137.html'}django-49.allow_tags[
][
]

这些只是一些基本的功能,requests-html还可以支持JavaScript渲染页面,看下一篇

转载于:https://www.cnblogs.com/yoyoketang/p/10662679.html

你可能感兴趣的文章
Xml二(解析思想)、
查看>>
网易2017内推笔试题 合唱团
查看>>
研究生期间做项目所学到的一些经验
查看>>
仿真灯泡 电灯泡 灯光 光环闪烁 流星雨
查看>>
配置Nginx的防盗链
查看>>
Webpack 多html入口、devServer、热更新配置
查看>>
mongoDB(1)
查看>>
26岁,你看着身边的人都结了婚
查看>>
NumPy
查看>>
Tips on C/C++
查看>>
BZOJ.5417.[NOI2018]你的名字(后缀自动机 线段树合并)
查看>>
BZOJ.4320.[ShangHai2006]Homework(根号分治 分块)
查看>>
css3实现圆环进度条
查看>>
Linux Shell函数定义与调用
查看>>
spark streaming方法
查看>>
随机生成想要的字符串位数
查看>>
Vue: ----父子组件的交流(互相传值和访问)
查看>>
封装原生ajax
查看>>
C#单链表的练习
查看>>
node--20 moogose demo2
查看>>