最新的爬虫工具requests-html
使用Python开发的同学一定听说过Requsts库,它是一个用于发送HTTP请求的测试。如比我们用Python做基于HTTP协议的接口测试,那么一定会首选Requsts,因为它即简单又强大。现在作者Kenneth Reitz 又开发了requests-html 用于做爬虫。
GiHub项目地址:
https://github.com/kennethreitz/requests-html
requests-html 是基于现有的框架 PyQuery、Requests、lxml、beautifulsoup4等库进行了二次封装,作者将Requests设计的简单强大的优点带到了该项目中。
安装:
pip install requests-html
先来看看requests的基本使用。
from requests_html import HTMLSession session = HTMLSession() r = session.get('https://python.org/') # 获取页面上的所有链接。 all_links = r.html.links print(all_links) # 获取页面上的所有链接,以绝对路径的方式。 all_absolute_links = r.html.absolute_links print(all_absolute_links)
- 小试牛刀
作为一个IT技术人员,是不是要时时关心一下科技圈的新闻,上博客园新闻频道,抓取最新的推荐新闻。
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', first=True) for new in news: print(new.text) # 获得新闻标题 print(new.absolute_links) # 获得新闻链接
执行结果:
外卖小哥击败北大硕士,获《中国诗词大会》冠军!董卿点赞 {'https://news.cnblogs.com/n/593573/'} 一图看懂中国科学家如何用“魔法药水”制备干细胞 {'https://news.cnblogs.com/n/593572/'} 再见Windows:你曾是我的全部 {'https://news.cnblogs.com/n/593559/'} 复盘摩拜卖身美团:美女创始人背后有3个男人 {'https://news.cnblogs.com/n/593536/'} 不要把认错当成一种PR! {'https://news.cnblogs.com/n/593494/'} 胡玮炜的胳膊拧不过马化腾的大腿 {'https://news.cnblogs.com/n/593450/'} 被废四年奇迹逆转!XP用户竟越来越多 {'https://news.cnblogs.com/n/593445/'} 天宫一号:我这一辈子 {'https://news.cnblogs.com/n/593414/'} 微软重组的背后:未来属于“微软”,而不只是Windows {'https://news.cnblogs.com/n/593375/'} 低俗、鬼畜受限令出台后,内容原创者的日子会好过点吗? {'https://news.cnblogs.com/n/593370/'} 《头号玩家》:一封献给极客的情书 {'https://news.cnblogs.com/n/593307/'} 翻了下Google日语输入法愚人节作品集,这个团队真的超有病… {'https://news.cnblogs.com/n/593285/'} C++委员会决定在C++20中弃用原始指针 {'https://news.cnblogs.com/n/593271/'} 一文读懂阿里收购饿了么:饿了么和美团外卖决战之日到了 {'https://news.cnblogs.com/n/593261/'} 刚刚天宫一号坠落 而中国空间站即将腾飞! {'https://news.cnblogs.com/n/593248/'} 小抖怡情适可而止 不要为了博眼球而去做一些危险的事情 {'https://news.cnblogs.com/n/593238/'} 拼多多淘宝低价阿胶背后:放马皮牛皮 掺禁用明胶 {'https://news.cnblogs.com/n/593232/'} 吴晓波对话刘强东:太保守 让我只能看着机会流走 {'https://news.cnblogs.com/n/593176/'}
扩展:我们可以进一步将这里数据做持久化处理,设计出自己的“头条”。
- 小有成就
接下来我们到网站上下载壁纸,以美桌网(www.win4000.com)为例。
from requests_html import HTMLSession import requests # 保存图片到bg/目录 def save_image(url, title): img_response = requests.get(url) with open('./bg/'+title+'.jpg', 'wb') as file: file.write(img_response.content) # 背景图片地址,这里选择1920*1080的背景图片 url = "http://www.win4000.com/wallpaper_2358_0_10_1.html" session = HTMLSession() r = session.get(url) # 查找页面中背景图,找到链接,访问查看大图,并获取大图地址 items_img = r.html.find('ul.clearfix > li > a') for img in items_img: img_url = img.attrs['href'] if "/wallpaper_detail" in img_url: r = session.get(img_url) item_img = r.html.find('img.pic-large', first=True) url = item_img.attrs['src'] title = item_img.attrs['title'] print(url+title) save_image(url, title)
这个网站上的图片还是很容易获取的,在上面的代码块中我加了注释。这里不再说明。
选择一个CSS选择器的元素:
>>> about = r.html.find('#about', first=True)
获取元素的文本内容:
>>> print(about.text)
获取元素的属性
>>> about.attrs {'id': 'about', 'class': ('tier-1', 'element-1'), 'aria-haspopup': 'true'}
渲染出一个元素的HTML:
>>> about.html
选择元素内的元素:
>>> about.find('a')
页面上的文本搜索:
>>> r.html.search('Python is a {} language')[0]
更复杂的CSS选择器的例子(从Chrome开发工具复制):
>>> r = session.get('https://github.com/') >>> sel = 'body > div.application-main > div.jumbotron.jumbotron-codelines > div > div > div.col-md-7.text-center.text-md-left > p' >>> print(r.html.find(sel, first=True).text)
它也支持:
>>> r.html.xpath('/html/body/div[1]/a')
JavaScript的支持
让我们抓住一些文本呈现的JavaScript:
>>> r = session.get('http://python-requests.org') >>> r.html.render() >>> r.html.search('Python 2 will retire in only {months} months!')['months'] '<time>25</time>'
注意,当你第一次运行render()方法,它将downloadchromium进入你的家目录(例如~ .pyppeteer / /)。
>>> from requests_html import HTML >>> doc = """<a href='https://httpbin.org'>""" >>> html = HTML(html=doc) >>> html.links {'https://httpbin.org'}
最新的爬虫工具requests-html的更多相关文章
- python爬虫工具集合
python爬虫工具集合 大家一起来整理吧!强烈建议PR.这是初稿,总是有很多问题,而且考虑不全面,希望大家支持! 源文件 主要针对python3 常用库 urllib Urllib是python提供 ...
- Python爬虫之requests
爬虫之requests 库的基本用法 基本请求: requests库提供了http所有的基本请求方式.例如 r = requests.post("http://httpbin.org/pos ...
- 常见Python爬虫工具总结
常见Python爬虫工具总结 前言 以前写爬虫都是用requests包,虽然很好用,不过还是要封装一些header啊什么的,也没有用过无头浏览器,今天偶然接触了一下. 原因是在处理一个错误的时候,用到 ...
- MinerUtil.java 爬虫工具类
MinerUtil.java 爬虫工具类 package com.iteye.injavawetrust.miner; import java.io.File; import java.io.File ...
- python爬虫工具
一直都听说python写爬虫工具非常方便,为了获取数据,我也要写点爬虫,但是python太灵活了,不知道python爬虫要哪些框架,要了解,比如beatiful soup,scrapy, 爬虫的额主要 ...
- Python 爬虫工具 —— fake_useragent
服务器为避免爬虫工具无休止的请求,以减轻负载,会对 user agent 进行校验,即判断某一 user-agent 是否不断地进行请求.可采用如下方式进行绕过服务器的校验. UserAgent_Li ...
- Windows下安装配置爬虫工具Scrapy及爬虫环境
爬虫工具Scrapy在Mac和Linux环境下都相对好装,但是在Windows上总会碰到各种莫名其妙的问题.本文记录下Scrapy在Window上的安装过程. 本文是基于Python2.7及Windo ...
- 第三百二十二节,web爬虫,requests请求
第三百二十二节,web爬虫,requests请求 requests请求,就是用yhthon的requests模块模拟浏览器请求,返回html源码 模拟浏览器请求有两种,一种是不需要用户登录或者验证的请 ...
- Nodejs书写爬虫工具
看了几天的nodejs,的确是好用,全当是练手了,就写了一个爬虫工具. 爬虫思路都是一致的,先抓取页面数据,然后分析页面,获取到所需要的数据,最后获得这些数据,是写入到硬盘,还是显示到网页,自己看着办 ...
随机推荐
- Unity修改Particles Render Material(Unity3D开发之二十三)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/48372999 ...
- 记一次线上coredump事故
1.事故背景 上周三凌晨,我负责的某个模块在多台机器上连续发生coredump,幸好发生在业务低峰期,而且该模块提供的功能也不是核心流程功能,所以对线上业务影响比较小.发生coredump后,运维收到 ...
- 百度编辑器上传视频音频的bug
前言:UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码,百度Ueditor 支持多种后台语言上传 ...
- Read程序员的困境有感
看完这篇文章,我真的害怕了,码农遍地都是,我就是,改变从今天做起,不走码农生活 首先, 打造你自己的私人项目.你需要不断地打磨自己的技艺.如果工作本身并不能帮助你做到这一点,就捡起那些你感兴趣的问题, ...
- javax.mail
摘抄 example: public static void sendEmail(ConfBean cBean, String filename, String filepath) { try { P ...
- 提升现代web app中页面性能
提升现代web app的中的页面性能 前言,本文翻译自https://docs.google.com/presentation/d/1hBIb0CshY9DlM1fkxSLXVSW3Srg3CxaxA ...
- Python Django开发中XSS内容过滤问题的解决
from:http://stackoverflow.com/questions/699468/python-html-sanitizer-scrubber-filter 通过下面这个代码就可以把内容过 ...
- Java自学?Java编程资源大放送
黑马程序员 北京JavaEE就业班32期教程视频+源码+资料 链接: https://pan.baidu.com/s/1VCXyNVD-LvlZyReVgzKXGg 密码:cike 黑马:Java基础 ...
- Roundcube Webmail跨站脚本漏洞(CVE-2015-5381 )
Preface Software: https://roundcube.net/Versions: 1.1.x<1.1.2CVE: CVE-2015-5381Author: sroesemann ...
- Java c# 跨语言Json反序列化首字母大小写问题
C#标准是首字母大写,Java规范是首字母小写,在序列化成Json之后,反序列化会出现反序列化失败的问题.. 从C#反序列化成JavaBean的时候通过如下注解可以直接解决该问题 @JsonNamin ...