0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个把爬虫下载器和解析器联合在一起的库

马哥Linux运维 来源:未知 作者:李倩 2018-05-13 10:56 次阅读

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

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-developmenthttps://mail.python.org/mailman/listinfo/python-dev/downloads/release/python-365//community/logos//community/sigs///jobs.python.orghttp://tornadoweb.orghttps://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,妈妈再也不用担心我学不会爬虫了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62567
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84623

原文标题:爬虫大神,又出新招

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    想学习下如何程序合在一起

    在下新手,刚入道,想学习下如何程序合在一起?在keil里面操作!两程序融合需要怎样操作呢?请前辈们指点!谢谢!
    发表于 08-02 14:56

    怎么程序凑合在一起

    奋斗了个把星期,弄会了chaoshengbo蔽障和蓝牙小车,但是不知道怎么这两程序凑合在一起,想请大神搭救一把
    发表于 09-17 21:33

    怎么主界面和子VI结合在一起

    就是做一个电梯的界面,然后我做好了一个个的功能的子VI,但是怎么调用使得运行的时候只出现电梯界面,然后通过电梯界面的按钮来调用子VI的功能,反正就是不知道怎么主界面和子VI结合在一起
    发表于 08-24 15:26

    几个单独的程序组合在一起

    怎样几个个单独的程序组合在一起,我现在在做环境检测仪,我可不可以先把温度,湿度,噪声等程序先单独做,然后它们组合在一起,可以吗,怎么组合,求大神告知
    发表于 03-23 14:22

    AD 如何属性的焊盘组合在一起

    AD如何属性的焊盘组合在一起
    发表于 11-16 11:43

    怎样讲maxwell与 Simplorer联合在一起用?

    怎样讲maxwell与 Simplorer联合在一起用?
    发表于 11-16 21:02

    请问ISE和Mircoblaze是如何结合在一起的?

    大家好,有人可以向我解释下ISE和Mircoblaze是如何结合在一起的吗?目前我已经在ISE中用VHDL编写了程序,我希望在我的设计中添加
    发表于 02-19 10:59

    请问怎么蓝牙模块实验和GPS模块实验整合在一起

    现在已经蓝牙模块实验、DS18B20实验和DHT11实验成功整合在一起了。现在就差GPS模块了。请问GPS模块要怎么接?我试过接在串口1,但是手机收不到GPS信息。
    发表于 03-03 23:34

    labview中模糊控制和pid是怎么结合在一起

    labview中模糊控制和pid是怎么结合在一起的?求高手解答,有简单的模糊控制和pid结合在一起的vi文件最好,
    发表于 03-13 08:04

    labview 中如何模糊控制和pid结合在一起呢?

    labview中模糊控制怎么导入?并且和pid结合在一起呢?有没有相关的VI做参考,求帮助,抱拳
    发表于 03-14 10:57

    USAT和USB BooLoad能结合在一起

    嗨,有没有可能将USAT和USB BooLoad结合在一起,以便它可以从任电缆获得固件?谢谢
    发表于 04-24 08:39

    51单片机中,如何两个数组的数合在一起然后给变量?

    51单片机中,怎么两个数组的数合在一起然后给变量 比如:char a[5]={01234} char b[5]={56789} char c; 怎么a[4]的数和b[3]的数
    发表于 10-31 07:34

    不同容量的电池组合在一起使用会出现什么问题?

    不同容量的电池组合在一起使用会出现什么问题?       如果将不同容量或新旧电池混在一起使用,有可能出现漏液,
    发表于 11-13 15:20 3391次阅读

    不同容量的电池组合在一起使用会出现什么问题?

    不同容量的电池组合在一起使用会出现什么问题? 当不同容量的电池组合在一起使用时,会产生系列问题。这些问题不仅会影响电池组的性能,还可能导致电池组、电子设备和人员的安全受到威胁。因此,电池组合使用之
    的头像 发表于 11-06 10:49 2627次阅读

    将5G信号链与电平转换结合在一起

    电子发烧友网站提供《将5G信号链与电平转换结合在一起.pdf》资料免费下载
    发表于 09-18 14:49 0次下载
    将5G信号链与电平转换结<b class='flag-5'>合在一起</b>