云服务器

python爬虫库requests-html

2019-12-05 11:26:14 100

使用过爬虫的同学们应该都使用过requests库,使用起来简洁优雅,但还有个爬虫的库,就是requests-html,最近在学习的时候也了解到了这个新的爬虫库,requests-html这个库有以下功能特点:

  • 支持JavaScript

  • 支持CSS选择器。

  • 支持xpath选择器

  • 模拟用户代理

  • 自动重定向

  • 连接池和cookie持久性

  • 支持异步

1.安装

pip install requests-html

安装requests-html非常简单,一行命令即可做到。需要注意一点就是,requests-html只支持Python 3.6及更新的版本,所以使用老版本的Python的同学需要更新一下Python版本了。

2.教程与使用

2.1 发送get请求
  1. from requests_html import HTMLSession


  2. session = HTMLSession()

发出GET请求:
resposse = session.get(‘http://news.qq.com/‘) #以腾讯新闻网为例

2.2 按原样获取页面上所有链接的列表(不包括锚点):

  1. print(r.html.links)

输出内容:{‘http://www.mohrss.gov.cn/‘, ‘http://www.dahe.cn/‘, ……}

2.3 以绝对形式抓取页面上所有链接的列表(锚点除外):
print(r.html.absolute_links)

输出内容:{‘http://new.qq.com/omn/20180630A0L1ED.html‘, ‘http://news.qq.com/a/20180624/001511.htm‘, ‘http://new.qq.com/omn/20180630A12MEU.html‘, ……}

2.4使用CSS选择器选择一个元素:
title = r.html.find('.f14>a', first=True).textprint(title)

输出内容:重磅!2018年版自贸试验区外资准入负面清单出炉

注意:first=True的意思是获取第一个元素,如果不加上就是获取所有的符合的元素

2.5 attrs 获取元素的所有属性:
title = r.html.find('.f14>a', first=True)print(title.attrs)

输出内容:{‘target’: ‘_blank’, ‘class’: (‘linkto’,), ‘href’: ‘http://new.qq.com/omn/FIN2018063001805300'}

2.6 获取元素的html:
title = r.html.find('.f14>a', first=True)print(title.html)

输出内容:重磅!2018年版自贸试验区外资准入负面清单出炉

2.7 搜索元素内的链接:
title = r.html.find('.f14>a', first=True)print(title.absolute_links)

输出内容:{‘http://new.qq.com/omn/FIN2018063001805300'}

2.8 在页面上搜索文字:

  1. title = r.html.search('重磅!{}年版自贸试验区外资准入负面清单出炉')[0]

  2. print(title)

输出内容:2018

2.9 XPath路径定位元素
title = r.html.xpath('//div[@class="text"]/em/a/text()')[0]print(title)

输出内容:重磅!2018年版自贸试验区外资准入负面清单出炉

2.10 解析本地文件
  1. from requests_html import HTML


  2. doc = """<a href='http://news.qq.com/'>"""


  3. html = HTML(html=doc)

  4. print(html.links)

输出内容:{‘http://news.qq.com/'}

3.小试牛刀

可以使用此工具爬取一些新闻

  1. from requests_html import HTMLSession


  2. session = HTMLSession()


  3. r = session.get("https://news.cnblogs.com/n/recommend")


  4. # 通过CSS找到新闻标签

  5. news = r.html.find('h2.news_entry > a')


  6. for new in news:

  7.    print(new.text)  # 获得新闻标题

  8.    print(new.absolute_links)  # 获得新闻链接

输出内容:

FBI抓捕第二位苹果中国工程师 指控窃取无人车机密面临10年监禁{'https://news.cnblogs.com/n/618633/'}百度工程师研发的猫窝让流浪喵不再难过冬:刷脸进门、病猫识别{'https://news.cnblogs.com/n/618581/'}阿里云年营收突破200亿 成亚洲最大云服务商{'https://news.cnblogs.com/n/618603/'}鏖战九载,Google是否会因Oracle而弃用Java?{'https://news.cnblogs.com/n/618598/'}余晟:从软件设计角度看携号转网{'https://news.cnblogs.com/n/618518/'}这种“救命药”的最大弱点:太便宜{'https://news.cnblogs.com/n/618543/'}.NET Core 3 Preview 2发布,C#8更强大的模式匹配{'https://news.cnblogs.com/n/618541/'}工资停发,强制休假,美国科学家一个多月过的啥日子{'https://news.cnblogs.com/n/618490/'}毕玄:我在阿里的十年技术感悟{'https://news.cnblogs.com/n/618380/'}问答社区已死?现在你很难在知乎上学到知识了{'https://news.cnblogs.com/n/618449/'}终于等到你!阿里正式向Apache Flink贡献Blink源码{'https://news.cnblogs.com/n/618379/'}互联网泡沫是试验场,资本寒冬是过滤器{'https://news.cnblogs.com/n/618397/'}北大毕业送外卖,谁的青春不迷茫{'https://news.cnblogs.com/n/618384/'}难逃返贫的中产:借机会主义发家,被机会主义葬送{'https://news.cnblogs.com/n/618345/'}数据垄断和信息孤岛,是如何驯化我们的?{'https://news.cnblogs.com/n/618284/'}当天气预报用上AR特效,主持人和观众都疯狂了{'https://news.cnblogs.com/n/618294/'}MIT黑科技:电脑里的人可以隔空摸你{'https://news.cnblogs.com/n/618205/'}程序员锁死服务器致公司倒闭?当事人逐条反驳:这锅我不背{'https://news.cnblogs.com/n/618179/'}

总结:这个新的爬虫库跟requests库一样简单易上手,用于解析HTML也是十分方便的,当然还有很多更多使用方法,可以参考requests-html的Github主页。




睿江云官网链接:https://www.eflycloud.com/home?from=RJ0032

上一篇: 无

微信关注

获取更多技术咨询