爬虫大神,又出新招

粉丝独白

几乎所有玩爬虫的人,一定会用requests库,这个库的作者是大名鼎鼎的Kenneth Reitz 。牛逼的一塌糊涂,最近我浏览它的网站,发现他又出新招,一个把爬虫下载器和解析器联合在一起的库,对爬虫界又是一大福音啊,一起来学习一下吧.

图片来自:https://www.kennethreitz.org/photos

01

Requests-Html

这个库它是requests库的姊妹篇,一般来说我们爬虫,我会直接在下载完网页之后,再去安装一些解析库来解析网页,解析库又有很多种,增加了我们的学习成本。

有没有一种库把这两者融合在一起,并且方便的提供给我们用。但是这个库直接内置了html网页的解析,相当于是自带酒水,非常方便,号称是给人类用的网页解析库。

目前这个库已经收获了7500个赞,323fork,相当牛逼!

02

这个库里都有啥

我们只需要用pip 直接install 即可。pip install requests-html ,这个库它内置了requests库,pyquery库,bs库,还有一些编码的库。最牛的是,它竟然把随机代理库fake-useragent也集成进来了!

# what packages are required for this module to be executed?

都内置了哪些牛逼的功能:

  • Full JavaScript support!
  • CSS Selectors (a.k.a jQuery-style, thanks to PyQuery).
  • XPath Selectors, for the faint at heart.
  • Mocked user-agent (like a real web browser).
  • Automatic following of redirects.
  • Connection–pooling and cookie persistence.
  • The Requests experience you know and love, with magical parsing abilities.

03

如何用这个库

1).比如我们爬取一个Python官网网页

>>
/about/quotes/
/about/success/#software-development
https://mail.python.org/mailman/listinfo/python-dev
/downloads/release/python-365/
/community/logos/
/community/sigs/
//jobs.python.org
http://tornadoweb.org
https://github.com/python/pythondotorg/issues
/about/gettingstarted/
...

简单吧,我们也不需要管什么http的请求头,也不需要管什么cookie,更不需要管代理angent.直接初始化一个HTMLSession()类的对象,就可以简简单单的解析网页的内容。一边轻松喝杯茶,一边直接调用r对象里面的方法,比如提取所有网页里面的超链接。

2).看一下HTMLSession对象里面都有哪些好的方法:

print ([e for e in dir(r.html) if not e.startswith('_')])

>>
['absolute_links', 'add_next_symbol', 'base_url', 'default_encoding', 
'element', 'encoding', 'find', 'full_text', 'html', 'links', 'lxml', 'next_symbol', 
'page', 'pq', 'raw_html', 'render', 'search', 'search_all','session', 'skip_anchors', 'text', 'url', 'xpath']

里面有很多有用的功能函数,比如find,search,search_all功能,非常方便!上边我们解析了Python官网,接着我们解析官网里面的about :

想要找到about元素里面的文本内容,我们只用find一行代码就可以搞定搞定

about = r.html.find('#about', first=True)
print (about.text)

>>
About Applications Quotes Getting Started Help Python Brochure

#about 是表示网页审查里面id为about (css方式提取),first置为true表示,如果取的元素是一个list,我们只返回第一个元素。

想读取about里面的attr:

print (about.attrs)

>>
{'id': 'about', 'class': ('tier-1', 'element-1'), 'aria-haspopup': 'true'}

想读取about里面的链接:

about.find('a')
>>

最牛逼的是这About对象已经把各种解析库的对象句柄都完成了初始化,比如大名鼎鼎的pyquery库的解析(css解析器),lxml库的解析。

直接用doc=about.pq,这里的doc其实就是把css解析的内容解析出来,我们可以非常方便的处理.


整个requests_html库相当于一个中间层,把复杂的解析网页的这些繁琐的步骤,再次的封装了,里面还有牛逼的功能,比如支持js页面的动态解析,内置了强大的chromium引擎和异步的解析session(AsyncHTMLSession),这个里面用的是Python非常牛逼的Asyncio库。

总之有了这个requests_html,妈妈再也不用担心我学不会爬虫了。更多使用方法可以参考:https://github.com/kennethreitz/requests-html

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2018-05-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据文摘

数据科学家必备!12个基本命令行工具帮你摆脱鼠标

18530
来自专栏喔家ArchiSelf

MCU上的代码执行时间

在许多实时应用程序中,二八原则并不生效,CPU 可以花费95%(或更多)的时间在不到5% 的代码上。电动机控制、引擎控制、无线通信以及其他许多对时间敏感的应用程...

11420
来自专栏NetCore

Sync Framework 词汇表

Sync Framework 词汇表 此词汇表列出和定义了 Microsoft Sync Framework 涉及的概念和术语。 术语 批处理 (batch...

20860
来自专栏进击的程序猿

分布式共享内存

本文是论文Treadmarks: Distributed Shared Memory on Standard Workstations and Operatin...

25120
来自专栏IT派

爬虫大神,又出新招

几乎所有玩爬虫的人,一定会用requests库,这个库的作者是大名鼎鼎的Kenneth Reitz 。牛逼的一塌糊涂,最近我浏览它的网站,发现他又出新招,一个把...

15230
来自专栏自然语言处理

数据分析:基于Python的自定义文件格式转换系统

无论读者现在是做数据挖掘、数据分析、自然语言处理、智能对话系统、商品推荐系统等等,都不可避免的涉及语料的问题即大数据。数据来源无非分为结构化数据、...

21620
来自专栏Golang语言社区

Golang-简洁的并发

转载原文:http://www.yankay.com/go-clear-concurreny/ 多核处理器越来越普及。有没有一种简单的办法,能够让我们写的软件释...

40440
来自专栏MixLab科技+设计实验室

设计师编程指南之Sketch插件开发 1

发现网上关于sketch插件开发的指南太少了,而且都不一定可以成功运行,于是我就写了这个系列的文章: 1 我们需要了解的语法特点 sketch 是基于 Coc...

76990
来自专栏owent

对atbus的小数据包的优化

atbus是我按之前的思路写得服务器消息通信中间件,目标是简化服务器通信的流程,能够自动选择最优路线,自动的断线重连和通信通道维护。能够跨平台并且高效。

11520
来自专栏ChaMd5安全团队

DedeCMS的两个小trick

0x00 前言 昨天晚上做了一个神奇的梦,梦到了我高中时候晚自习在偷偷的看《黑客攻防技术宝典》,当年的事情无论是苦是乐,回忆起来总是感觉非常的美好。但是,现实就...

32990

扫码关注云+社区

领取腾讯云代金券