Python爬虫工具requests-html使用解析


Posted in Python onApril 29, 2020

使用Python开发的同学一定听说过Requsts库,它是一个用于发送HTTP请求的测试。如比我们用Python做基于HTTP协议的接口测试,那么一定会首选Requsts,因为它即简单又强大。现在作者Kenneth Reitz 又开发了requests-html 用于做爬虫。

该项目从3月上线到现在已经7K+的star了!

GiHub项目地址:

https://github.com/kennethreitz/requests-html

requests-html 是基于现有的框架 PyQuery、Requests、lxml、beautifulsoup4等库进行了二次封装,作者将Requests设计的简单强大的优点带到了该项目中。

安装:

 pip install requests-html

教程与使用:

使用GET请求 https://python.org 网站。

先来看看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')
for new in news:
  print(new.text) # 获得新闻标题
  print(new.absolute_links) # 获得新闻链接

执行结果:

雷军:小米硬件综合净利率永远不超5%!
{'https://news.cnblogs.com/n/595156/'}
苦大仇深的“中国芯”,不妨学一学有趣的树莓派
{'https://news.cnblogs.com/n/595143/'}
我的快递,凭什么不能给我送到家!
{'https://news.cnblogs.com/n/595087/'}
倪光南回应方舟CPU失败论:企业失败不等于技术失败
{'https://news.cnblogs.com/n/595102/'}
清华大学突破纪录:首次实现25个量子接口间量子纠缠
{'https://news.cnblogs.com/n/595103/'}
定向免流量套餐用着爽,但背后的“坑”你可能不知道
{'https://news.cnblogs.com/n/595061/'}
你在微信群侃大山,有人却用微信群发大财
{'https://news.cnblogs.com/n/595059/'}
马云的三观
{'https://news.cnblogs.com/n/595047/'}
美国科技强大的全部秘密
{'https://news.cnblogs.com/n/595043/'}
盖茨看着听证会上的扎克伯格:满眼都是20年前的自己
{'https://news.cnblogs.com/n/595025/'}
史上最清晰癌细胞转移3D影像来袭
{'https://news.cnblogs.com/n/595019/'}
中兴员工:华为仅部分芯片自己设计 谁被美制裁都得死
{'https://news.cnblogs.com/n/594967/'}
作为曾经的华为员工,我想替中兴公司说两句公道话
{'https://news.cnblogs.com/n/594962/'}
匿名网友回评梁宁:方舟bug无数 贴钱给别人都未必用
{'https://news.cnblogs.com/n/594932/'}
一段关于国产芯片和操作系统的往事
{'https://news.cnblogs.com/n/594900/'}
芯片股总市值低于美国巨头 有公司靠政府补助盈利
{'https://news.cnblogs.com/n/594902/'}
被自家律师送上“枪口”的“二流”中兴
{'https://news.cnblogs.com/n/594859/'}
Google正在失去DeepMind?
{'https://news.cnblogs.com/n/594853/'}

扩展:我们可以进一步将这里数据做持久化处理,设计出自己的“头条”。

接下来我们到网站上下载壁纸,以美桌网(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)

这个网站上的图片还是很容易获取的,在上面的代码块中我加了注释。这里不再说明。

Python爬虫工具requests-html使用解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
python的中异常处理机制
Aug 30 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
django如何自己创建一个中间件
Jul 24 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
python将四元数变换为旋转矩阵的实例
Dec 04 Python
python cookie反爬处理的实现
Nov 01 Python
python spilt()分隔字符串的实现示例
May 21 Python
python中__slots__节约内存的具体做法
Jul 04 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 #Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 #Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 #Python
Django分组聚合查询实例分享
Apr 29 #Python
python中sympy库求常微分方程的用法
Apr 28 #Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 #Python
Python startswith()和endswith() 方法原理解析
Apr 28 #Python
You might like
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
咖啡的植物学知识
2021/03/03 咖啡文化
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
基于MVC方式实现三级联动(JavaScript)
2017/01/23 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
Python 除法小技巧
2008/09/06 Python
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python协程的用法和例子详解
2017/09/09 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
中文专业学生自我评价范文
2014/02/06 职场文书
大学生求职计划书
2014/04/30 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
2014年信访工作总结
2014/11/17 职场文书
生活委员竞选稿
2015/11/21 职场文书
班主任寄语2016
2015/12/04 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
德劲DE1102数字调谐收音机机评
2022/04/07 无线电