python爬虫库requests-html
使用过爬虫的同学们应该都使用过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请求
from requests_html import HTMLSession
session = HTMLSession()
发出GET请求:
resposse = session.get(‘http://news.qq.com/‘) #以腾讯新闻网为例
2.2 按原样获取页面上所有链接的列表(不包括锚点):
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 在页面上搜索文字:
title = r.html.search('重磅!{}年版自贸试验区外资准入负面清单出炉')[0]
print(title)
输出内容:2018
2.9 XPath路径定位元素
title = r.html.xpath('//div[@class="text"]/em/a/text()')[0]print(title)
输出内容:重磅!2018年版自贸试验区外资准入负面清单出炉
2.10 解析本地文件
from requests_html import HTML
doc = """<a href='http://news.qq.com/'>"""
html = HTML(html=doc)
print(html.links)
输出内容:{‘http://news.qq.com/'}
3.小试牛刀
可以使用此工具爬取一些新闻
from requests_html import HTMLSession
session = HTMLSession()
r = session.get("https://news.cnblogs.com/n/recommend")
# 通过CSS找到新闻标签
news = r.html.find('h2.news_entry > a')
for new in news:
print(new.text) # 获得新闻标题
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